java를 사용한다면 빈 객체를 넘겨줘야할 일이 한번쯤은 발생할 것이다.
이 때, null을 넘겨주는 것은 굉장히 위험하니 빈 list를 넘겨줘야 되는 경우가 많이 발생한다.
(아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라)
이 경우, 우리는 두 가지 선택지가 존재한다.
Collections.EMPTY_LIST를 쓸지, Collections.emptyList()를 쓸지.
전자의 경우(EMPTY_LIST 사용)
빈 객체를 넘겨주기 위해 EMPTY_LIST 상수값을 넘겨주었다.
이제 테스트를 돌려보자.
아래와 같은 경고가 발생한다.
uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
형변환을 따로 안해줘서 그런걸까?
이번엔 아래와 같이 타입을 지정해주고 다시 돌려보자.
일단 인텔리제이에서 타입 안정성을 보장할 수 없다고 뜰 뿐만 아니라,
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가 있다는 걸 다시 한 번 느끼게 된다.
'JAVA > JAVA | Spring 학습기록' 카테고리의 다른 글
[JAVA] Cache를 이용한 재사용으로 성능을 높이자 (0) | 2022.03.16 |
---|---|
[호호 스터디] 재사용: 상속보단 조립_ 객체지향과 디자인 패턴 Chapter 4 (2) | 2022.03.12 |
[호호 스터디] 다형성과 추상 타입_ 객체지향과 디자인 패턴 Chapter 3 (2) | 2022.03.02 |
null을 반환하지 말고 빈 객체, 또는 Optional을 반환하자 (0) | 2022.03.01 |
[220221] 호호 스터디_ 객체지향과 디자인 패턴 Chapter 2 (2) | 2022.02.21 |