[Effective Java] null 대신 비어있는 배열이나 컬렉션을 반환하자. |
-
비어있는 배열이나 컬렉션 대신 null 을 반환하는 메소드를 사용할 때는 null checking 을 하는 복잡하고 긴 형태의 코드를 작성해야 한다.
또한 클라이언트 코드를 작성하는 프로그래머가 반환 값인 null 을 처리하는 코드 작성을 잊어버리면 NullPointerException 이 발생하기 쉽다.
-
비어있는 배열보다는 null 값을 반환하는 것이 좋다는 주장도 있다.
배열을 생성하는 비용이 들지 않기 때문이다.
그러나 두 가지 면에서 이는 틀렸다.
1. 해당 메소드가 정말로 성능 문제의 원인인지 성능 프로파일에 나타나지 않으면 이런 경우에는 성능 우려를 할 것이 못 된다.
2. 길이가 0인 배열은 불변 객체이고, 불변 객체는 자유로이 공유될 수 있어 성능 이슈가 나타나지 않을 수 있다.
실제 컬렉션으로부터 배열로 항목들을 복사하는 표준 이디엄에서 하는 일이 그것이다.
-
toArray 메소드는 일반적으로 반환될 배열을 생성하지만, 만일 해당 컬렉션이 비어있다면 인자로 전달된 빈 배열을 반환한다. ( Collection 을 담을 그릇이 충분한 경우 그 배열을 반환 )
이디엄
private final List<Cheese> cheesesInStock = ...;
private static final Cheese[] EMPTY_CHEESE_ARRY = new Cheese[ 0 ];
public Cheese[] getCheeses(){
return cheesesInStock.toArray(EMPTY_CHEESE_ARRY );
}
-
Collection 쪽에서 Collections.emptySet, emptyList, emptyMap 과 같이 동일한 불변 컬렉션을 반환한다.
Summary
배열 또는 컬렉션 반환 메소드에서 빈 배열이나 컬렉션을 반환하는 대신 null 을 반환해야 할 이유가 없다.
null 을 반환하는 이디엄은 배열의 길이가 실제 배열과 무관하게 반환되는 C 프로그래밍 언어에서 전해진 것이다.
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 지역 변수의 유효 범위를 최소화 하자. (0) | 2017.01.24 |
---|---|
[Effective Java] 외부에 제공하는 모든 API 요소에 대해 문서화 주석을 넣자. (0) | 2017.01.23 |
[Effective Java] 가변인자(varargs)를 분별력 있게 사용하자. (0) | 2017.01.17 |
[Effective Java] 오버로딩(overloading)을 분별력 있게 사용하자. (0) | 2017.01.16 |
[Effective Java] 메소드 시그니처를 신중하게 설계하자. (0) | 2017.01.12 |
댓글