본문 바로가기
공부/이펙티브자바

54. null이 아닌, 빈 컬렉션이나 배열을 반환하자

by JERO__ 2022. 4. 1.

예시) 사용하면 안되는 코드

private final List<Cheese> cheesesInStock = ...;

public List<Cheese> getCheeses() {
	return cheesesInStock.isEmtpy() ? null : new ArrayList<>(cheesesInStock);
}
  • 매장 안의 모든 치즈 목록 반환, 재고가 없다면 null 반환.
    • null을 반환한다면, 클라이언트는 이 null을 처리하는 코드를 추가로 작성해야 함.
    • 코드가 복잡해진다.
List<Cheese> cheeses = shop.getCheeses();
if (cheeses != null && cheeses.contains(Cheese.M\\\\ozzarell
	...
}
  • 값을 반은 후 null값 체크를 다시 해주어야 함

절대 null을 반환하지 말고 길이가 0인 배열을 반환하라.

  • 길이 0짜리 배열을 미리 선언해두고 매번 그 배열을 반환하면 된다. 길이 0인 배열은 모두 불변이기 때문이다.
private static final Cheese[] EMTPY_CHEESE_ARRAY = new Cheese[0];

public Cheese[] getCheeses() {	
	return cheesesInStock.toArray(EMTPY_CHEESE_ARRAY);
}

댓글