-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
6 Weeks - [Generic Type Erasure란?] #91
Comments
Type Erasure제네릭(Generic) 타입에 사용된 타입 정보를 컴파일 타임에만 사용하고 런타임에는 소거하는 것을 말합니다. Type Erasure 규칙
Type Erasure 사용
Generics은 Java에서 JDK 5에서 도입되었습니다. 이전에 작성된 많은 코드들이 이미 존재했고, 그런 코드들과의 호환성을 유지하기 위해 Type Erasure 방식이 도입되었습니다. Generics를 지원하지 않는 구형 코드와 Generics를 사용하는 신규 코드 간에 문제 없이 상호 운용할 수 있게 되었습니다.
타입 소거로 컴파일된 클래스는 실제로는 제네릭 타입의 정보를 가지지 않습니다. 컴파일 시에 타입 매개변수가 제거되고, 원시 타입으로 변환하여 이러한 타입 소거로 인해 컴파일된 클래스 파일에는 제네릭 타입 정보에 대한 메타데이터가 포함되지 않습니다. 따라서 런타임 시에는 타입에 대한 정보가 존재하지 않아 Type Erasure 방식으로 인해 JVM은 실행 시점(Runtime)에 추가적인 오버헤드 없이 일반 클래스처럼 작동합니다. Type Erasure 과정
class Sample<T> {
T something;
...
}
// 런타임
class Sample {
Object something;
...
} extends를 통해 타입에 상한 제한 public static <T> void sample(T something) {
...
}
// 런타임
public static void sample(Object something) {
...
}
class Sample<T extends Number> {
T something;
...
}
// 런타임
class Sample {
Number something;
...
} extends를 통해 타입에 상한 제한 public static <T extends Number> void sample(T something) {
...
}
// 런타임
public static void sample(Number something) {
...
} |
public static List<String> a(List<String> in) {
return new LinkedList<>();
}
public static List<Integer> a(List<Integer> in) {
return new LinkedList<>();
} |
문제
이전에 예준님이 잠깐 설명하셨는데, 정확하게 과정을 이해하지 못하였습니다.
Type Erasure가 사용되는 이유와 과정에 대해 알려주시면 감사하겠습니다!
contents - 세부 내용
참고
The text was updated successfully, but these errors were encountered: