17.7 수정할 수 없는 컬렉션 (Immutable)
1. 박물관 전시품 🖼️
데이터를 저장한 후에 “이제 아무도 건드리지 마!”라고 확정 짓고 싶을 때가 있습니다. 이것을 수정할 수 없는(Immutable) 컬렉션이라고 합니다. 마치 유리관 속에 넣은 박물관 전시품처럼, 보기만(Read) 할 수 있고 만질(Write) 수는 없습니다.
만약 억지로 데이터를 추가하거나 삭제하려고 하면?
UnsupportedOperationException (지원하지 않는 기능입니다!) 에러가 발생하며 쫓겨납니다. 👮♂️
2. 만드는 방법 (of, copyOf)
자바 9부터 아주 쉽게 만들 수 있는 방법이 추가되었습니다.
1) 처음부터 불변으로 만들기 (.of())
// "A", "B", "C"가 들어있는 리스트 생성 (수정 불가)
List<String> list = List.of("A", "B", "C");
// list.add("D"); // 에러 발생! ❌
// list.remove(0); // 에러 발생! ❌
Set과 Map도 똑같습니다.
Set<String> set = Set.of("A", "B", "C");
Map<Integer, String> map = Map.of(1, "A", 2, "B");
2) 기존 컬렉션을 불변으로 복사하기 (.copyOf())
이미 있는 ArrayList를 수정 못 하게 박제하고 싶다면?
// 1. 일반 리스트 (수정 가능)
List<String> normalList = new ArrayList<>();
normalList.add("Java");
// 2. 불변 리스트로 복사 (수정 불가)
List<String> safeList = List.copyOf(normalList);
// safeList.add("Python"); // 에러 발생! ❌
핵심 요약: 변하면 안 되는 기준 정보(예: 요일, 메뉴판, 설정값)는
List.of()등을 사용해서 불변 컬렉션으로 만드는 것이 안전합니다.
서브목차