불변성(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 |