항목 | 제네릭 클래스 | 정적 메서드 | 정적 제네릭 메서드 |
---|---|---|---|
정의 | 클래스 선언에 제네릭 타입 파라미터를 사용하는 클래스 | 클래스에 속하는 정적 메서드 | 메서드 선언에 제네릭 타입 파라미터를 사용하는 정적 메서드 |
타입 파라미터 위치 | 클래스 레벨 | 정적 메서드는 타입 파라미터를 사용하지 않는다 | 메서드 레벨 |
타입 결정 시점 | 클래스가 인스턴스화될 때 | 정적 메서드는 타입 파라미터를 사용하지 않으므로, 타입 결정 시점이 없다. 메서드 정의 시 타입이 이미 결정 | 메서드 호출 시 |
타입 파라미터 사용 가능 여부 | O | X | O |
주된 목적 | 클래스가 다양한 타입을 처리할 수 있도록 유연성을 제공 | 클래스 수준에서의 공통 기능 제공 | 정적 메서드에서 제네릭 타입을 사용하여 유연성을 제공 |
타입이레이저
제네릭은 자바 컴파일 단계에서만 사용되고, 컴파일 이후에는 제네릭 정보가 삭제된다.
제네릭에 사용한 타입 매개변수 가 모두 사라지는 것이다.
쉽게 이야기해서 컴파일 전인 .java
에는 제네릭의 타입 매개변수가 존재하지만,
컴파일 이 후인 자바 바이트코드 .class
에는 타입 매개변수가 존재하지 않는 것이다.
자바 컴파일러는 제네릭에서 타입 인자로 지정한 타입으로 캐스팅하는 코드를 추가해준다.
따라서 타입이 모두 지워져도 따로 캐스팅 필요없이 정상작동한다.