null을 리턴하는 코드는 NPE를 처리하기 위한 코드를 추가로 작성해야 하고 그렇다고 성능이 좋은 것도 아니다.
List를 반환하는 로직을 작성하기 위해서 우리에게는 두 가지 선택지가 있다.
Collections.emptyList()
그리고 new ArrayList()
이 둘은 무슨 차이가 있을까?
이는 Collections.emptyList()
가 무엇인지만 알면 된다.
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
위에서 알 수 있는 부분은 두 가지.
1. Collections.emptyList()
는 static으로, 이미 만들어진 객체다. 따라서 CPU와 메모리에 추가 비용이 발생하지 않는다.
2. Collections.emptyList()
는 final, 불변 객체를 리턴한다. 따라서 객체를 받아 값을 변경해야 하는 등의 추가 작업이 있는 경우에는 new ArrayList()
를 쓰는 것이 적합해보인다.
null로 리턴하는 것만 피하면 된다고 생각했는데, 주의 깊게 봐야 하는 부분이 더 많았다.
컬렉션을 다루는 로직을 개발할 때에는 꼭 짚고 넘어가야 할 부분이라고 느껴져서 남겨본다.