반응형
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
- IntelliJ
- date
- 이클립스
- 인텔리제이
- 정규식
- 이탈리아
- windows
- javascript
- list
- CSS
- html
- Maven
- Button
- ArrayList
- 문자열
- table
- Java
- 테이블
- 자바
- CMD
- Array
- 자바스크립트
- Visual Studio Code
- json
- vscode
- 배열
- input
- Eclipse
- js
- string
Archives
- Today
- Total
어제 오늘 내일
[Java] Collections.unmodifiableSet() – 읽기 전용 집합 만들기 본문
Java에서 Set
을 외부에 그대로 반환하면, 원하지 않는 요소 추가나 삭제가 발생할 수 있습니다.
이때 Collections.unmodifiableSet()
을 사용하면 집합을 읽기 전용(Read-Only)으로 감싸 안전하게 다룰 수 있습니다.
1. 기본 사용법
import java.util.*;
public class UnmodifiableSetExample {
public static void main(String[] args) {
Set<String> original = new HashSet<>();
original.add("Java");
original.add("Python");
Set<String> unmodifiable = Collections.unmodifiableSet(original);
System.out.println(unmodifiable); // [Java, Python]
}
}
👉 unmodifiableSet()
은 원본 Set
을 감싸는 읽기 전용 뷰(View)를 반환합니다.
2. 수정 불가능
읽기 전용 뷰에서는 요소를 추가하거나 삭제할 수 없습니다.
unmodifiable.add("C++"); // UnsupportedOperationException 발생
unmodifiable.remove("Java"); // UnsupportedOperationException 발생
👉 단순 조회(contains()
, size()
, 반복문 등)는 정상적으로 가능합니다.
3. 원본 변경은 반영됨
unmodifiableSet()
이 반환하는 것은 복사본이 아니라 원본을 감싼 뷰이므로, 원본을 수정하면 읽기 전용 뷰에도 그대로 반영됩니다.
original.add("C#");
System.out.println(unmodifiable); // [Java, Python, C#]
👉 즉, 진짜 불변 Set은 아님에 주의해야 합니다.
4. 언제 쓰면 좋을까?
- API 안정성 확보: 외부 호출자에게 Set을 반환할 때 실수로 변경하지 못하게 하고 싶을 때
- 읽기 전용 뷰 제공: 내부 데이터는 유지하면서 외부에는 안전하게 제공
- 데이터 보호: 실수나 의도치 않은 조작으로부터 데이터 보호
5. 진짜 불변 Set이 필요하다면?
Java 9 이상에서는 Set.of()
를 사용하여 불변 Set을 바로 만들 수 있습니다.
Set<String> immutableSet = Set.of("A", "B", "C");
👉 이 경우 원본 자체도 수정할 수 없습니다.
6. 정리
Collections.unmodifiableSet(set)
→ 읽기 전용 Set 뷰 생성- 뷰에서는 추가/삭제/수정 불가능
- 원본을 바꾸면 뷰에도 반영됨 → 불변 컬렉션은 아님
- 진짜 불변 Set은
Set.of()
사용
👉 Set을 외부에 안전하게 공유하려면 Collections.unmodifiableSet()
을 사용하자!
반응형
'IT > Java' 카테고리의 다른 글
[Java] Collections.unmodifiableMap() – 읽기 전용 맵 만들기 (0) | 2025.09.14 |
---|---|
[Java] Collections.unmodifiableList() – 읽기 전용 리스트 만들기 (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