Java에서는 List.of(...) 메서드를 사용하면 컬렉션을 편리하게 생성할 수 있다. 하지만 List.of(...) 메서드로 생성한 컬렉션 객체는 가변 객체가 아니라 불변 객체로 생성된다.
List.of(...) 메서드로 생성한 컬렉션 객체는 불변 객체이므로 변경하게 되면, UnsupportedOperationException 예외가 발생한다.
※ List를 제외한 Set, Map 클래스에서도 List.of(...)와 같은 of() 클래스 메서드를 제공한다.
List<Integer> list = List.of(1, 2, 3);
List<Integer> mutableList = new ArraysList<>(list);
List.of(...) 메서드로 불변 컬렉션을 생성하였는데, 이 컬렉션을 가변 컬렉션으로 변경하고 싶다면 위의 코드와 같이 변경할 수 있다.
new ArrayList<>(불변 리스트)와 같이 원하는 컬렉션 프레임워크를 생성할 때, 인자로 불변 컬렉션 객체를 넣어주면 된다.
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<Integer> unmodifiableList = Collections.unmodifiableList(list);
가변 컬렉션을 불변 컬렉션으로 전환하고 싶다면 위의 코드와 같이 Collections.unmodifiableList() 메서드를 사용하면 된다. 각 컬렉션에 맞는 unmodifiableXxx() 가 존재한다.