-
[Java] 불변 단 건 리스트는 Collections.singletonList() 를 활용해보세요.스터디 노트 2023. 10. 17. 16:41
Java에서 단건의 요소가 담긴 Collection을 반환해줄일이 생길 수가 있습니다.
다양한 Collection 구현체들이 사용될 수 있지만, 오늘은 Collections의 singletonList()에 대해 알아보겠습니다.
... return Collections.singoletonList("test"); ...
위와 같이 사용하시면 됩니다.
사용하실 때엔 단일요소가 확정적으로 반영될 수 있는 비즈니스에서 활용하시면 됩니다.
기본적으로 singletonList 메소드는 SingletonList<>를 반환하도록 선언이 되어있습니다.
위의 설명을 읽어볼까요?
'저장한 개체만을 포함하는 불변 목록을 반환합니다. 반환된 목록은 직렬화가 가능합니다.'
결국 전달된 매개변수만으로 구성된 List를 반환해주는 역할을 합니다.
불변객체로써 하나의 요소만을 보장할 수 있다는 것이죠.
여기서 중요한 점은 불변객체의 요소 1개의 List라는 점입니다.
SingletonList 클래스의 내부 구현을 보면 한 번에 이해할 수 있습니다.
singletonList로 반환을 하게 되면 get메소드에서 0 이상이 들어올 경우 바로 IndexOutOfBoundsException을 보내줍니다.
0 이상을 선언하지 말라는 말이지요.
단건의 List를 사용해야 할 경우, Arrays.asList("test")보다 Collections.singletonList("test")를 사용하실 경우 보다 확실하게 단건임을 보장할 수 있습니다.
또한 Arrays.asList의 경우 set메소드를 활용할 수 있지만, Collections.singletonList의 경우 set메소드도 사용할 수 없습니다. 그 이유는 위에서 설명드린데로 불변 리스트이니까요!
// Arrays.asList로 생성한 List에서 set으로 값 변경 List<String> asList = Arrays.asList("a"); asList.set(0, "b"); // asList.get(0)의 값 b로 변경 // Collections.singletonList로 생성한 불변 List에서 set으로 값 변경 List<String> singletonList = Collections.singletonList("a"); singletonList.set(0, "b"); // java.lang.UnsupportedOperationException 발생
두 구현체 모두 요소를 추가하거나 삭제하는 등의 구조적 변경에 대해서는 막혀있지만, 값의 변경 기능은 Arrays.asList에서는 허용되고 singletonList에선 막혀있습니다.
'스터디 노트' 카테고리의 다른 글
스프링 빈 스코프에 대하여 (0) 2023.10.18 @RestControllerAdvice에 대하여 (0) 2023.10.18 Java Optional의 메소드 사용 설명서(Optional 잘 활용하기) (1) 2023.10.16 [Java] IntStream 메소드 사용해보기 (0) 2023.10.16 자바 JDK 9 부터 JDK17까지의 주요 코딩 특징 (0) 2023.10.12