IT 개발/개념 정리

[아이템 54] null이 아닌, 빈 컬렉션이나 배열을 반환하라

UIJ 2022. 7. 29. 11:29

컬렉션이나 배열 같은 컨테이너(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는 사용하기 어렵고 오류 처리 코드도 늘어난다. 그렇다고 성능이 좋은 것도 아니다.

반응형