반응형
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
- ArrayList
- list
- vscode
- Array
- 이탈리아
- 이클립스
- table
- CMD
- Visual Studio Code
- js
- json
- IntelliJ
- windows
- 문자열
- Java
- Maven
- date
- Button
- CSS
- 인텔리제이
- string
- 자바스크립트
- 테이블
- 자바
- javascript
- 정규식
- Eclipse
- input
- 배열
- html
Archives
- Today
- Total
어제 오늘 내일
[Java] Collections.checkedList() – 런타임 타입 안전한 리스트 만들기 본문
Java에서 제네릭은 컴파일 시 타입 안전성을 보장합니다.
하지만 제네릭 타입이 런타임에는 지워(erasure) 되기 때문에, 잘못된 타입이 들어와도 컴파일러가 잡지 못하는 경우가 발생할 수 있습니다.
이럴 때 Collections.checkedList()
를 사용하면, 런타임에도 타입 검사를 수행하여 예상치 못한 타입 오류를 빠르게 잡을 수 있습니다.
이 메서드는 런타임에 제네릭 타입 안정성을 강제할 수 있도록 도와줍니다.
1. 기본 사용법
import java.util.*;
public class CheckedListExample1 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
List<String> safeList = Collections.checkedList(list, String.class);
safeList.add("Hello");
safeList.add("World");
System.out.println(safeList); // [Hello, World]
}
}
👉 checkedList()
는 원래 리스트(list)를 감싸면서, 허용할 타입(String.class)을 지정합니다.
2
. 잘못된 타입 삽입 방지
만약 잘못된 타입을 넣으려 하면 런타임 예외(ClassCastException)가 발생합니다.
import java.util.*;
public class CheckedListExample2 {
public static void main(String[] args) {
List rawList = new ArrayList(); // Raw 타입 사용 (제네릭 미적용)
List<String> safeList = Collections.checkedList(rawList, String.class);
rawList.add(123); // 컴파일러는 경고만 하고 통과
// safeList.add(123); → 런타임 시 ClassCastException 발생
}
}
👉 이렇게 하면 Raw 타입이나 외부 코드에서 잘못된 값을 삽입했을 때 문제를 바로 발견할 수 있습니다.
3. 왜 필요한가?
- 레거시 코드 호환성: 옛날 Java 코드에는 Raw 타입 컬렉션이 많음 → 타입 안전하지 않음
- 외부 API와 연동: 외부 라이브러리나 프레임워크에서 제네릭을 제대로 안 쓰는 경우 안전장치 필요
- 디버깅 편의: 문제를 조기에 발견 가능
4. 다른 컬렉션에서도 사용 가능
checkedSet()
, checkedMap()
도 동일한 방식으로 동작합니다.
Set<Integer> set = Collections.checkedSet(new HashSet<>(), Integer.class);
set.add(10);
set.add(20);
// set.add("Wrong"); // 런타임 예외 발생
5. 정리
Collections.checkedList(List<E> list, Class<E> type)
→ 주어진 리스트를 감싸서 런타임 타입 검사를 수행- 잘못된 타입이 들어가면
ClassCastException
발생 checkedSet()
,checkedMap()
도 동일한 원리- 레거시 코드, 외부 API 연동 시 타입 안정성 확보에 유용
👉 제네릭 타입을 런타임에도 강제하고 싶다면 Collections.checkedList()
를 활용하자!
반응형
'IT > Java' 카테고리의 다른 글
[Java] Collections.unmodifiableSet() – 읽기 전용 집합 만들기 (0) | 2025.09.13 |
---|---|
[Java] Collections.unmodifiableList() – 읽기 전용 리스트 만들기 (0) | 2025.09.13 |
[Java] Collections.nCopies() – 같은 값으로 채워진 불변 리스트 만들기 (0) | 2025.09.12 |
[Java] Collections.fill() – 리스트를 한 값으로 채우기 (0) | 2025.09.11 |
[Java] Collections.rotate() – 리스트를 간단히 회전시키는 방법 (0) | 2025.09.11 |
Comments