privatefinalList<Cheese> cheesesInStock =...;/** * @return 매장 안의 모든 치즈 목록 반환 * 단, 재고가 없다면 null반환 */publicList<Cheese>getCheeses() {returncheesesInStock.isEmpty() ?null:newArrayList<>(cheesesInStock);}
위 예처럼 null을 반환하면 클라이언트는 null 상황을 처리하는 코드를 추가로 작성해줘야한다.
다음과 같이 컨테이너(컬렉션이나 배열)가 빈 경우 null을 반환하는 메서드 사용시 항상 위와 같이 방어 코드를 넣어줘야한다. 실제로 객체가 0개일 가능성이 거의 없는 경우에서는 한참뒤에 오류가 발생할 수 있다. 또한, null을 반환하는 곳에서도 null 에 대한 처리를 별도로 해줘야해 코드가 더 복잡해진다.
빈컨테이너를 null 대신 반환해야하는 이유는 다음과 같다.
성능 분석 결과 할당이 성능 저하의 주범이라고 확인되지 않는 한, 이 정도의 성능 차이는 신경 쓸 정고가 아니다.