반응형
제네릭이란?
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 타입검사를 수행하는 방법. (List<String>)
반대 개념으로 Raw Type을 들 수 있다. (List)
효과
- 컴파일 시점에 타입 체크를 수행할 수 있어서 좀 더 안정성 제공.
(런타임 시에 타입 에러가 발생하지 않고, 컴파일 시점에 타입 에러가 발생한다는 것은 엄청난 효과....!)
제네릭의 타입 소거 시점
- 제네릭 타입은 컴파일 시점에 컴파일러에 의해 자동으로 검사 되어 타입 변환된다.
- 그리고 나서 런타임 시점에는 모든 제네릭 타입은 소거(제거)되고, 런타임 시점에는 어떠한 제네릭 타입도 포함되지 않게 된다.
제네릭의 특징
- 비구체화
- 제네릭 타입은 비구체화 타입으로, 컴파일 시점에 타입 체크를 수행하고 런타임에는 타입을 모두 소거하는 방법을 사용하고 있다. (기존의 Raw Type과의 호환성을 위해서)
- 참고로 배열은 구체화 (런타임 시점에 타입을 알고 있음)
- 비공변
- 또한 배열과 다르게 제네릭은 비공변의 특징을 갖고 있음.
- Parent, Child 타입이 있을 경우(Parent 타입은 Child 타입의 상위 타입이다)
List<Parent>는 List<Child>의 부모 타입이 아님. - (배열은 공변의 성질을 가지고 있어서 Parent, Child 타입이 있을 경우 Parent[]는 Child[]의 상위 타입이 된다.)
반응형
'Application > JAVA & Kotlin' 카테고리의 다른 글
Thread/Heap dump 뜨는 법 (0) | 2023.04.19 |
---|---|
자바 병렬성과 동시성 정리 (0) | 2023.03.13 |
Java Thead (1) | 2021.07.31 |
JVM이란? JVM의 구조 간단 정리 (0) | 2021.03.26 |
[모던 자바 인 액션 정리] 7장. 병렬 데이터 처리와 성능 (2) | 2020.12.30 |