Java컬렉션과 제네릭

immutable collection과 List.of

Java에서 수정 가능한 컬렉션과 수정 불가능한 컬렉션이 어떻게 다르고, `List.of`, `Set.of`, `Map.of`를 어떤 관점으로 써야 하는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

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