반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- CSS
- 정규식
- vscode
- Visual Studio Code
- ArrayList
- json
- HashMap
- table
- input
- Java
- 자바
- date
- Array
- list
- javascript
- html
- 자바스크립트
- 인텔리제이
- 문자열
- string
- 이탈리아
- map
- 이클립스
- IntelliJ
- 배열
- CMD
- js
- Button
- replace
- Eclipse
Archives
- Today
- Total
어제 오늘 내일
[Java] Collections.unmodifiableList() – 읽기 전용 리스트 만들기 본문
Java에서 컬렉션을 외부로 반환할 때, 의도치 않게 데이터가 수정되는 경우가 있습니다.
이를 막고 싶을 때 사용할 수 있는 방법이 바로 Collections.unmodifiableList() 입니다.
이 메서드를 이용하면 리스트를 **읽기 전용(Read-Only)**으로 감싸 안전하게 다룰 수 있습니다.
1. 기본 사용법
import java.util.*;
public class UnmodifiableListExample1 {
public static void main(String[] args) {
List<String> original = new ArrayList<>();
original.add("Apple");
original.add("Banana");
List<String> unmodifiable = Collections.unmodifiableList(original);
System.out.println(unmodifiable); // [Apple, Banana]
}
}
👉 unmodifiableList()는 원본 리스트를 감싸는 읽기 전용 뷰(View)를 생성합니다.
2. 수정 불가능
읽기 전용 뷰에서는 추가, 삭제, 변경이 모두 불가능합니다.
unmodifiable.add("Cherry"); // UnsupportedOperationException 발생
unmodifiable.remove("Apple"); // UnsupportedOperationException 발생
unmodifiable.set(0, "Orange"); // UnsupportedOperationException 발생
👉 단순히 get(), size() 같은 읽기 연산만 가능합니다.
3. 원본 리스트는 여전히 수정 가능
주의할 점은, unmodifiableList()가 원본을 복사하는 것이 아니라 감싸는 것이라는 사실입니다.
original.add("Cherry");
System.out.println(unmodifiable); // [Apple, Banana, Cherry]
👉 즉, 원본이 바뀌면 읽기 전용 리스트에도 그대로 반영됩니다.
4. 언제 사용하면 좋을까?
- API에서 컬렉션 반환할 때
→ 외부에서 리스트를 수정하지 못하게 막음 - 데이터 무결성 보장
→ 예기치 않은 수정으로 인한 버그 방지 - 읽기 전용 뷰 제공
→ 내부적으로는 수정 가능하지만 외부에는 안전한 접근만 허용
5. 진짜 불변 리스트가 필요하다면?
Collections.unmodifiableList()는 원본을 수정할 수 있기 때문에 완전한 불변 리스트(Immutable List)는 아닙니다.
완전한 불변 리스트가 필요하다면 Java 9 이상에서 제공하는 List.of()를 사용하는 것이 더 적합합니다.
List<String> immutable = List.of("A", "B", "C");
👉 이 경우 원본 자체도 수정 불가능합니다.
6. 정리
Collections.unmodifiableList(list)→ 리스트의 읽기 전용 뷰 생성- 뷰에서는 추가/삭제/수정 불가능
- 단, 원본 리스트가 바뀌면 뷰도 함께 바뀜
- 외부에 안전하게 리스트를 반환할 때 유용
- 진짜 불변 리스트는
List.of()사용
👉 리스트를 외부에 안전하게 공유하고 싶다면 Collections.unmodifiableList()를 쓰자!
반응형
'IT > Java' 카테고리의 다른 글
| [Java] Collections.unmodifiableMap() – 읽기 전용 맵 만들기 (0) | 2025.09.14 |
|---|---|
| [Java] Collections.unmodifiableSet() – 읽기 전용 집합 만들기 (0) | 2025.09.13 |
| [Java] Collections.checkedList() – 런타임 타입 안전한 리스트 만들기 (0) | 2025.09.12 |
| [Java] Collections.nCopies() – 같은 값으로 채워진 불변 리스트 만들기 (0) | 2025.09.12 |
| [Java] Collections.fill() – 리스트를 한 값으로 채우기 (0) | 2025.09.11 |
Comments