-
Notifications
You must be signed in to change notification settings - Fork 1
item 54 JungHyunLyoo
JungHyunLyoo edited this page May 8, 2020
·
6 revisions
null을 반환하는 메서드를 사용하는 클라이언트는 null을 return 받게 되면 오류의 늪으로 빠지게 될 수 있다. 따라서 null을 적절하게 처리하는 방어 코드를 추가로 작성해야 한다.
if(Objects.nonNull(value)){
//exec
}
방어 코드를 넣어야 하는 메서드가 길고 복잡하다면...? 끔찍...
그래서 차라리 빈 컨테이너(컬렉션, 배열, etc..)를 반환하는 것이 낫다.
위와 같은 주장을 할 수도 있다. 하지만 이는 두 가지 면에서 틀린 주장이다.
1.성능 차이는 신경 쓸 수준이 못된다.(item 67참조)
2.빈 컬렉션과 배열은 굳이 새로 할당하지 않고도 반환할 수 있다.
매번 똑같은 빈 '불변' 컬렉션을 반환하는 것이다. 불변 객체는 자유롭게 공유해도 안전하다!(item 17)
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? Collections.emptyList() : new ArrayList<>(cheesesInStock);
}
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
public static final List EMPTY_LIST = new EmptyList<>();
배열도 마찬가지다
private static final Cheese[] EMPTY_CHEESE_ARRAY = new Cheese[0];
public Cheese[] getCheeses() {
return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
}