카테고리 없음
[JAVA] Collections emptyList() vs EMPTY_LIST
따뜻한 세상을 만드는 개발자
2023. 7. 2. 10:46
빈 리스트를 반환하는 경우 Collections의 emptyList()가 자주 사용됩니다.
하지만 Collections에 public으로 EMPTY_LIST도 노출이 되어 있기 때문에 emptyList() 대신 EMPTY_LIST을 사용하는 코드도 보게 되는데요.
결론적으로 이야기 하면 EMPTY_LIST 보다는 emptyList()을 사용해야 합니다.
그 이유는 Generic 관점에서 차이가 있기 때문입니다.
- EMPTY_LIST: Raw 타입으로 타입 안전하지 않음
- emptyList(): Generic으로 되어 있어 타입 안전
emptyList 메서드가 EMPTY_LIST를 반환하기는 하지만 아래와 같이 Generic을 통해 타입 변환을 해줍니다.
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
이 둘의 차이는 반환된 리스트를 다른 메서드의 파라미터로 넘기거나, 다른 변수에 넣을 때 발생하는데요.
EMPTY_LIST를 사용하는 경우 아래처럼 제네릭 타입체크가 전혀 이루어지지 않게 됩니다.
public void testEmptyList() {
var fieldEmptyList = Collections.EMPTY_LIST;
var methodEmptyList = Collections.emptyList();
foo(fieldEmptyList); // 정상 호출
foo(methodEmptyList); // 컴파일 에러
}
public void foo(List<String> stringSource) {
for (String s : stringSource) {
System.out.println(s);
}
}