JAVA/기초

[Java] List와 불변성(Immutability)

안양큰스님 2024. 3. 4. 23:16

불변성(Immutability)은 데이터가 변경될 수 없는 상태를 의미합니다. List의 불변성은 리스트에 저장된 요소들이 변경되지 않음을 보장합니다. 즉, 한 번 생성된 리스트의 요소들은 추가, 삭제, 변경되지 않습니다.

List의 불변성을 구현하는 방법은 다양합니다.

 

1. List.of()

제가 가장 많이 쓰고 좋아하는, Java 9부터 제공되는 List.of() 메서드로 작성된 예시입니다.

import java.util.List;

public class ImmutableListExample {
    public static void main(String[] args) {
        // 불변 리스트 생성
        List<String> immutableList = List.of("apple", "banana", "cherry");

        // 요소 추가, 삭제, 변경 시도
        // immutableList.add("date"); // UnsupportedOperationException 발생
        // immutableList.remove(0);   // UnsupportedOperationException 발생
        // immutableList.set(0, "apple_updated"); // UnsupportedOperationException 발생

        // 불변 리스트의 요소 출력
        System.out.println("Immutable List:");
        for (String item : immutableList) {
            System.out.println(item);
        }
    }
}

 

이 불변 리스트는 요소의 추가, 삭제, 변경이 불가능합니다. 따라서 `add()`, `remove()`, `set()` 등의 메서드를 호출하면 `UnsupportedOperationException`이 발생합니다.

 

2. Collections.unmodifiableList()

Collections.unmodifiableList() 메서드를 사용하여 불변 리스트를 생성할 수 있습니다. 이 메서드는 주어진 리스트를 수정할 수 없는 뷰로 감싸 반환합니다. 즉, 원본 리스트를 변경할 수 없게 됩니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ImmutableListExample {
    public static void main(String[] args) {
        // 원본 리스트 생성
        List<String> originalList = new ArrayList<>();
        originalList.add("apple");
        originalList.add("banana");
        originalList.add("cherry");

        // 불변 리스트 생성
        List<String> immutableList = Collections.unmodifiableList(originalList);

        // 원본 리스트 변경 시도
        // originalList.add("date"); // UnsupportedOperationException 발생

        // 불변 리스트의 요소 출력
        System.out.println("Immutable List:");
        for (String item : immutableList) {
            System.out.println(item);
        }
    }
}

 

3. Guava의 ImmutableList 클래스

Google Guava 라이브러리에는 불변 리스트를 생성할 수 있는 ImmutableList 클래스가 있습니다. 이 클래스를 사용하여 불변 리스트를 간단히 생성할 수 있습니다.

import com.google.common.collect.ImmutableList;

public class ImmutableListExample {
    public static void main(String[] args) {
        // 불변 리스트 생성
        ImmutableList<String> immutableList = ImmutableList.of("apple", "banana", "cherry");

        // 불변 리스트의 요소 출력
        System.out.println("Immutable List:");
        for (String item : immutableList) {
            System.out.println(item);
        }
    }
}

 

지금까지 보아왔듯이 List의 불변성은 다중 스레드 환경에서 안전성을 제공하고, 프로그램의 안정성을 높이는데 도움을 줍니다.

 

또한 불변 리스트는 변경이 불가능하기 때문에 동일한 데이터에 대한 여러 참조가 있어도 안전하게 공유할 수 있습니다.

 

 

 

'JAVA > 기초' 카테고리의 다른 글

[Java] Collection - Set  (0) 2024.03.16
[Java] foreach문  (0) 2024.03.14
[Java] Collection - List  (1) 2024.03.04
[Java] 추상 클래스와 인터페이스의 동시 사용  (0) 2024.02.27
[Java] 다중 인터페이스(다중 상속)  (0) 2024.02.27