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

김종준·2023년 8월 2일
0

이펙티브자바

목록 보기
47/63

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

컬렉션이나 배열 같은 컨테이너가 비었을 때 null을 반환하는 메서드를 사용할 때면 항시 방어 코드를 넣어주어야 한다.

클라이언트에서 방어 코드를 빼먹으면 오류가 발생할 수 있다.

한편 null을 반환하려면 반환하는 쪽에서도 이 상황을 특별히 취급해줘야 해서 코드가 더 복잡해진다.

때로는 빈 컨테이너를 할당하는 데도 비용이 드니 null을 반환하는 것이 낫다는 주장도 있다.

하지만 이는 두 가지 면에서 틀린 주장이다.

첫 번째, 성능 분석 결과 이 할당이 성능 저하의 주범이라고 확인되지 않는 한, 이 정도의 성능 차이는 신경 쓸 수준이 못 된다.

두 번째, 빈 컬렉션과 배열은 굳이 새로 할당하지 않고도 반환할 수 있다.

가능성은 작지만, 빈 컬렉션 할당이 성능을 눈에 띄게 떨어뜨릴 수도 있다.

하지만 이는 매번 똑같은 빈 '불변' 컬렉션을 반환하는 것으로 해결할 수 있다.

Collections.emptyList 메서드가 그러한 예이다.

단, 이 역시 최적화에 해당하니 꼭 필요할 때만 사용하는 것이 좋다.

배열을 쓸 때도 마찬가지다.

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

보통은 단순히 정확한 길이의 배열을 반환하기만 하면 된다.

그 길이가 0일 수도 있을 뿐인 것이다.

이것도 성능을 떨어뜨릴 것 같다면 길이가 0짜리 배열을 미리 선언해두고 매번 그 배열을 반환하면 된다.

길이가 0인 배열은 모두 불변이기 때문이다.

0개의 댓글