Java/Java이론

Immutable List란?

P_eli 2024. 12. 10. 16:43
728x90
반응형

Immutable List는 변경 불가능한 리스트로, 리스트의 요소를 추가하거나 삭제하는 등의 조작이 불가능합니다. 데이터 무결성을 유지하고, 예기치 않은 데이터 변경으로 인한 문제를 방지할 수 있습니다.

Immutable List는 Java 9부터 기본적으로 제공되는 List.of() 메서드나 Google Guava 라이브러리의 ImmutableList를 통해 생성할 수 있습니다. 이러한 리스트는 읽기 전용 데이터가 필요하거나, 다중 스레드 환경에서 안전하게 데이터를 공유해야 할 때 유용합니다.

 

 

Immutable List의 장점

  1. 데이터 무결성 유지
    데이터가 변경되지 않도록 보장하여, 예기치 않은 동작을 방지할 수 있습니다.
  2. 스레드 안정성
    다중 스레드 환경에서 데이터를 안전하게 공유할 수 있습니다.
  3. 가독성
    변경되지 않는 데이터라는 의도를 코드에서 명확히 드러낼 수 있습니다.
  4. 최적화 가능성
    Immutable List는 수정이 불가능하므로, 런타임 최적화가 더 효과적으로 이루어질 수 있습니다.

 

활용 예제: Java 9 List.of()

Java 9부터 List.of() 메서드를 사용하여 간단히 Immutable List를 생성할 수 있습니다.

import java.util.List;

public class ImmutableListExample {
    public static void main(String[] args) {
        List<String> immutableList = List.of("A", "B", "C");

        System.out.println("Immutable List: " + immutableList);

        // 아래 코드는 실행 시 UnsupportedOperationException 발생
        // immutableList.add("D"); 

        // immutableList.remove("A");
    }
}

 

실행 결과:

List.of()로 생성된 리스트는 요소를 추가, 삭제, 변경할 수 없으며, 시도할 경우 UnsupportedOperationException이 발생합니다.

 

 

실용적 사용 예시

1. API 응답 데이터의 읽기 전용 처리

API 응답 데이터는 보통 읽기 전용으로 사용됩니다. Immutable List로 처리하면 클라이언트에서 데이터가 수정되는 것을 방지할 수 있습니다.

public List<String> getReadOnlyData() {
    return List.of("Data1", "Data2", "Data3");
}

 

2. 다중 스레드 환경에서 데이터 공유

동기화 문제를 방지하고 안전하게 데이터를 공유하기 위해 Immutable List를 사용합니다.

public class ThreadSafeData {
    private static final List<String> SHARED_DATA = List.of("Shared1", "Shared2");

    public static List<String> getSharedData() {
        return SHARED_DATA;
    }
}

 

 

주의할 점

  1. Immutable List는 수정이 불가능하므로, 생성 시점에 데이터가 완전해야 합니다.
  2. 대량의 데이터가 필요할 경우 성능 문제가 발생할 수 있으니, 상황에 맞게 설계가 필요합니다.

Immutable List를 사용하면 코드 안정성과 가독성이 향상됩니다. 데이터의 신뢰성을 보장해야 하거나, 동시성을 고려해야 하는 애플리케이션에서는 Immutable List를 적극 활용해보세요!

728x90
반응형