Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 불변 컬렉션(Immutable Collection)의 이점과 사용법

Java 9에서는 Collections API에 여러 정적 팩토리 메서드(static factory method)가 추가되었습니다. 이 메서드들을 활용하면 수정할 수 없는(unmodifiable) 리스트, 셋, 맵 컬렉션 객체를 몇 줄의 코드만으로 간편하게 생성할 수 있습니다. List.of(), Set.of(), Map.of(), Map.ofEntries()는 Java 9에서 불변(immutable) 컬렉션을 만들 수 있도록 제공되는 대표적인 정적 팩토리 메서드입니다.

불변 컬렉션의 주요 이점

  • 적은 힙(Heap) 공간 사용: 이전 버전 자바의 전통적인 방식과 비교했을 때, 컬렉션 데이터를 저장하는 데 필요한 메모리 공간이 훨씬 적습니다.
  • 더 빠른 데이터 접근: 데이터를 저장하고 Collections.unmodifiable로 감싸는 오버헤드가 줄어들어 데이터 접근 속도가 빨라집니다. 그 결과 프로그램 전체의 효율성이 향상됩니다.
  • 스레드 안전성(Thread Safety): 불변 컬렉션은 구조적으로 변경될 수 없기 때문에 모든 스레드가 항상 동일한 데이터 뷰를 보게 되며, 별도의 동기화 처리 없이도 스레드로부터 안전합니다.

문법(Syntax)

List.of(elements...)
Set.of(elements...)
Map.of(k1, v1, k2, v2)

예제 코드

import java.util.Set;
import java.util.List;
import java.util.Map;

public class ImmutableCollectionsTest {
    public static void main(String args[]) {
        List<String> stringList = List.of("a", "b", "c");
        System.out.println("List values: " + stringList);

        Set<String> stringSet = Set.of("a", "b", "c");
        System.out.println("Set values: " + stringSet);

        Map<String, Integer> stringMap = Map.of("a", 1, "b", 2, "c", 3);
        System.out.println("Map values: " + stringMap);
    }
}

실행 결과

List values: [a, b, c]
Set values: [a, b, c]
Map values: {a=1, b=2, c=3}

참고: 불변성 특징

위 팩토리 메서드로 생성된 컬렉션은 읽기 전용입니다. 따라서 요소를 추가(add), 삭제(remove), 수정(put)하려고 시도하면 런타임에 UnsupportedOperationException이 발생합니다. 또한 Set.of()Map.of()는 중복된 요소나 키를 허용하지 않으며, 중복이 존재하면 IllegalArgumentException이 발생하므로 주의해야 합니다. 값이 변경되지 않아야 하는 상수 데이터나 다중 스레드 환경에서 공유되는 데이터를 다룰 때 불변 컬렉션을 활용하면 코드의 안정성과 신뢰성을 크게 높일 수 있습니다.