기본 패턴
java
List<String> roles = List.of("ADMIN", "EDITOR", "VIEWER");
Set<Integer> levels = Set.of(1, 2, 3);설명
- Java 컬렉션을 배울 때는 보통
ArrayList,HashSet,HashMap같은 수정 가능한 컬렉션부터 익히지만, 실무에서는 "이 컬렉션이 바뀌어도 되는가"가 더 중요한 질문이 되는 경우가 많습니다. List.of,Set.of,Map.of는 JDK 9부터 추가된 편의 생성 메서드로, 수정 불가능한 컬렉션을 간결하게 만들게 해 줍니다. 초기 데이터가 정해져 있고 이후 바뀌지 않아야 할 때 특히 잘 맞습니다.- 수정 가능 컬렉션과 수정 불가능 컬렉션의 차이는 단순히 메서드 호출 가능 여부만이 아닙니다. 코드 의도를 더 분명하게 드러내고, 여러 곳에서 공유될 때 예상치 못한 변경을 줄이는 데 큰 도움이 됩니다.
- 다만 "컬렉션이 수정 불가능하다"와 "그 안의 원소까지 완전히 불변이다"는 다른 문제입니다. 원소 객체가 가변이면 컬렉션이 수정 불가능해도 내부 상태 변화는 여전히 일어날 수 있습니다.
- 좋은 기준은 간단합니다. 데이터가 준비된 뒤 바뀌지 않아야 한다면 처음부터 immutable collection을 선택하는 편이 더 안전하고 읽기 쉽습니다.
빠른 정리
| 선택지 | 의미 |
|---|---|
new ArrayList<>() | 수정 가능한 컬렉션 |
List.of(...) | 수정 불가능한 리스트 |
Set.of(...) | 수정 불가능한 집합 |
Map.of(...) | 수정 불가능한 맵 |
| 핵심 질문 | 이후에 변경이 허용되어야 하는가 |
주의할 점
List.of로 만든 컬렉션은 add, remove, set 같은 변경 연산을 허용하지 않습니다. 이후에 값을 바꿀 계획이 있다면
처음부터 수정 가능한 컬렉션으로 시작하거나 복사본을 만들어 다루는 편이 맞습니다.
참고 링크
2 sources