JAVA/JAVA | Spring 학습기록

Collections.EMPTY_LIST vs Collections.emptyList() 무엇이 다를까?

kth990303 2022. 3. 3. 17:18
반응형

java를 사용한다면 빈 객체를 넘겨줘야할 일이 한번쯤은 발생할 것이다.

이 때, null을 넘겨주는 것은 굉장히 위험하니 빈 list를 넘겨줘야 되는 경우가 많이 발생한다.

(아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라)

 

이 경우, 우리는 두 가지 선택지가 존재한다.

Collections.EMPTY_LIST를 쓸지, Collections.emptyList()를 쓸지.

 

전자의 경우(EMPTY_LIST 사용)

빈 객체를 넘겨주기 위해 EMPTY_LIST 상수값을 넘겨주었다.

이제 테스트를 돌려보자.

test는 모두 통과하나, 경고가 발생한다.

아래와 같은 경고가 발생한다.

uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

 

형변환을 따로 안해줘서 그런걸까?

이번엔 아래와 같이 타입을 지정해주고 다시 돌려보자.

타입을 캐스팅해주고 test를 돌려본 결과

일단 인텔리제이에서 타입 안정성을 보장할 수 없다고 뜰 뿐만 아니라,

test에서도 경고를 띄워주는 것을 알 수 있다.

 

이는 List<List<String>> 타입 지정뿐만 아니라, List로만 타입을 지정해줄 때에도 똑같이 경고가 발생한다.

 

Warning:(47, 34) Unchecked cast: 'java.util.List' to 'java.util.List<java.util.List<java.lang.String>>

 

git에 commit 할 때에도 계속 이 에러를 만날 것이다.


type 안정성을 위해 생겨난 Collections.emptyList()

이러한 단점으로 인해 java 1.5부터 Collections.emptyList()가 생겨났다!

일단 사용 빈도부터가 38%로 넘사벽임을 알 수 있다 ㅎㅎ

Collections.emptyList()는 EMPTY_LIST와 달리 상수가 아닌 빈 객체를 반환하는 것을 알 수 있다.

또한, List 타입을 반환하는 EMPTY_LIST와 달리, List<T>를 반환하기 때문에 타입 안정성을 보장할 수 있다.

 

test를 돌려보자.

아까의 빨간색 경고 문구가 사라진 것을 볼 수 있다!


결론

빈 컬렉션을 반환해야 할 땐, Collections.emptyList()를 쓰도록 하자.

 

java에는 정말 많은 api가 있다는 걸 다시 한 번 느끼게 된다.

 

도움된 글: http://daplus.net/java-collections-emptylist-%EC%99%80-collections-empty_list%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C/

 

[java] Collections.emptyList ()와 Collections.EMPTY_LIST의 차이점은 무엇입니까? - 리뷰나라

Java에는 Collections.emptyList () 및 Collections.EMPTY_LIST가 있습니다. 둘 다 동일한 속성을 갖습니다. 빈 목록 (불변)을 반환합니다. 이 목록은 직렬화 가능합니다. 그렇다면 둘 중 하나를 사용하는 것의

daplus.net

 

반응형