Skip to content

Latest commit

 

History

History
5 lines (3 loc) · 1.09 KB

43.md

File metadata and controls

5 lines (3 loc) · 1.09 KB

Java generics 에는 primitive type 을 쓸 수 없는 문제가 있습니다. 왜 그럴까요? 어떻게 해결할 수 있을까요?

제네릭은 타입 소거라는 방식으로 동작합니다. 제네릭 타입을 지정하더라도 컴파일러가 컴파일 시 타입을 소거하기 때문에 런타임에 실제로는 Object타입과 같이 작동을 하게 되는데요, T 타입으로 제네릭 선언 -> 컴파일 시 Object로 타입 소거 -> 사용 시 T 타입으로 형변환의 과정을 거치게 됩니다. 따라서 제네릭 T 자리에 들어오는 타입은 반드시 Object의 하위 타입이어야 합니다. 아니라면 Object로 형변환을 할 수 없기 때문이죠. 그런데 모든 reference type은 Object의 하위 타입이지만, primitive 타입은 Object의 하위 타입이 아닙니다. 때문에 제네릭으로는 primitive 타입을 쓸 수 없는 것이죠.

그래서 제네릭에 primitive type을 사용하고 싶다면 어쩔 수 없이 해당 타입의 wrapper type을(int -> Integer, double -> Double 등) 대신 사용해야 합니다.