[아이템 54] null이 아닌, 빈 컬렉션이나 배열을 반환하라
컬렉션이나 배열 같은 컨테이너(container)가 비었을 때 null을 반환하는 메서드를 사용하면 방어 코드를 넣어줘야 한다.
private final List<Cheese> cheesesInStock = ....;
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? null : new ArrayList<>(cheesesInStock);
}
제거기 앖디거 특별한 취급을 할 필요는 없지만 아래와 같이 방어 코드가 필요하다.
List<Cheese> cheese = shop.getCheeses();
if (cheese != null && cheeses.contains(Cheese.STILTON))
Sytem.out.println("좋았어, 바로 그거야.");
사용 패턴에 따라 빈 컬렉션 할당이 성능을 떨어뜨리는 경우 매번 똑같은 빈 '불변' 컬렉션을 반환하면 된다.
Collections.emptySet, Collections.emptyMap을 사용하면 된다.
최적화가 필요하다고 판단되면 수정 전과 후의 성능을 측정하여 실제로 성능이 개선 되는지 꼭 확인하자.
return cheeseInStock.toArray(new Cheese[cheeseInStock.size()]);
null이 아닌, 빈 배열이나 컬렉션을 반환하라. null을 반환하는 API는 사용하기 어렵고 오류 처리 코드도 늘어난다. 그렇다고 성능이 좋은 것도 아니다.
'IT 개발 > 개념 정리' 카테고리의 다른 글
Spring Security 환경에서 h2 console enabled : true일 때 오류 (0) | 2023.09.10 |
---|---|
[아이템 61] 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2022.08.15 |
[아이템 51] 메서드 시그니처를 신중히 설계하라 (0) | 2022.07.22 |
[아이템 50]적시에 방어적 본사본을 만들라 (0) | 2022.07.22 |
[아이템 49] 매개변수가 유효한지 검사하라 (0) | 2022.07.22 |