List, Set, Map
인터페이스는 공통적으로 정적 메소드 of()
를 지원하고 있습니다. of()
는 수정 불가능한(immutable) 컬렉션을 생성하는데 사용됩니다.
여기서 수정이 불가능하다는 것은 초기에 설정한 요소들 외에는 삽입과 삭제를 허용하지 않는다는 것을 의미합니다.
사용은 다음과 같이합니다.
List<E> 변수명 = List.of(E elem, ...);
Set<E> 변수명 = Set.of(E elem, ...);
Map<K, V> 변수명 = Map.of(K k, V v, ...);
이렇게 선언된 컬렉션에 삽입, 삭제를 할 경우 예외가 발생합니다.
public class Main {
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3);
list.add(4);
}
}
수정 불가능한 컬렉션을 만드는 또 다른 방법으로는 List, Set, Map
인터페이스의 정적 메소드 copyOf()
를 사용하는 것입니다. copyOf
는 지정된 컬렉션을 복사하는 과정에서 복사 결과로 나온 컬렉션을 수정이 불가능한(immutable) 컬렉션으로 만듭니다.
List<E> 변수명 = List.copyOf(Collection<E> c);
Set<E> 변수명 = Set.copyOf(Collection<E> c);
Map<K, V> 변수명 = Map.copyOf(Map<K, V> m);
마찬가지로 copyOf으로 복사된 컬렉션에 삽입, 삭제 연산을 하는경우 예외가 발생합니다.
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
List<Integer> copiedList = List.copyOf(list);
copiedList.add(1); //예외 발생
}
}
배열을 이용해서 수정이 불가능한 List
를 만들 수 있습니다. Arrays.asList()
를 이용하면 배열을 불변 List로 만들 수 있습니다.
List<E> 변수명 = Arrays.asList(배열);
역시 이 List에 삽입, 삭제를 시도하면 예외가 발생합니다.
public class Main {
public static void main(String[] args) {
Integer[] arr = {1, 2, 3};
List<Integer> list = Arrays.asList(arr);
list.add(4); //예외 발생
}
}