[Java] 수정 불가능한 컬렉션 of()

Bam·2024년 3월 15일
0

Java

목록 보기
69/98
post-thumbnail

of()

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);
    }
}

copyOf

수정 불가능한 컬렉션을 만드는 또 다른 방법으로는 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 컬렉션 생성

배열을 이용해서 수정이 불가능한 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);	//예외 발생
    }
}

0개의 댓글