# Table of Contents

# Immutable Collection

Java 9에는 컬렉션(Collection)불변 객체로 생성할 수 있도록 List, Set, Map에 새로운 메소드들이 추가되었다.

Immutable Collection은 요소의 삽입, 수정, 삭제가 불가능하다. 만약 삽입, 수정, 삭제를 하면 UnsupportedOperationException이 발생한다.

# Java 9 이전

Java 9 이전에는 Collections클래스의 unmodifiableList() 메소드로 Immutable List를 생성한다.

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

list = Collections.unmodifiableList(list);

list.add(4);
Exception in thread "main" java.lang.UnsupportedOperationException

unmodifiableSet()메소드로 Immutable Set을 생성할 수 있다.

Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
set.add(3);

set = Collections.unmodifiableSet(set);

set.add(5);
Exception in thread "main" java.lang.UnsupportedOperationException

unmodifiableMap()메소드로 Immutable Map을 생성할 수 있다.

Map<String, String> map = new HashMap<String, String>();
map.put("name", "Paul");
map.put("nation", "USA");
map.put("job", "Programmer");

map = Collections.unmodifiableMap(map);

map.put("address", "New york");
Exception in thread "main" java.lang.UnsupportedOperationException

# Java 9 이후

Java 9부터는 of()메소드로 불변 컬렉션을 쉽게 생성할 수 있다.

# Immutable List

List<Integer> list = List.of(1, 2, 3, 4, 5);

list.add(6);  
Exception in thread "main" java.lang.UnsupportedOperationException

# Immutable Set

Set<Integer> set = Set.of(1, 2, 3);

set.add(4);
Exception in thread "main" java.lang.UnsupportedOperationException

# Immutable Map

Immmutable Map은 of()또는 ofEntires()로 생성할 수 있다.

Map<String, String>  map = Map.of("name", "Paul", "nation", "USA");
Map<String, String>  map = Map.ofEntries(
    Map.entry("name", "Paul"),
    Map.entry("nation", "USA")
);