본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] null 대신 비어있는 배열이나 컬렉션을 반환하자.

by 돼지왕 왕돼지 2017. 1. 19.
반응형

 [Effective Java] null 대신 비어있는 배열이나 컬렉션을 반환하자.


cheese, collection, Collections, Effective JAVA, empty array, empty collection, emptylist, emptymap, emptyset, list, NPE, null checking, NullPointerException, toarray, [Effective Java] null 대신 비어있는 배열이나 컬렉션을 반환하자., 공유, 길이가 0인 배열, 메소드, 반환될 배열, 배열, 배열 생성, 불변, 비어있는 배열, 비용, 빈 배열, 성능, 성능 우려, 이디엄, 컬렉션, 표준 이디엄, 프로파일


-
비어있는 배열이나 컬렉션 대신 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 프로그래밍 언어에서 전해진 것이다.





반응형

댓글