[JAVA] 타입 소거 (Type Erasure)
자바의 타입 소거?
자바의 설계 철학과 하위 호환성 때문에 생긴 개념.
기존 자바코드(JDK 1.4 이하)는 아래처럼 타입 안정성이 보장되지 않았었는데
List list = new ArrayList();
list.add("hello");
list.add(123); // 문제 없음
자바5부터 아래처럼 제네릭이 도입되면서 컴파일 과정에서 데이터 타입을 검사하게 됨.
List<String> list = new ArrayList<>();
list.add("hello");
list.add(123); // 컴파일 에러
제네릭 기능을 기존 자바 코드와 호환되게 하면서도, JVM 구조를 변경하지 않고 도입하기 위한 기법이 타입 소거!!
컴파일 시에 제네릭을 검사하지만, 컴파일 이후에는 타입 정보가 사라지게 된다.
이로 인해 아래의 문제점들이 발생하게 되었고
- 리플렉션, 직렬화 등에 제약 발생.
- 제네릭 타입 활용 불가. ( instanceof, new T() )
이를 위해 사용하는 것들이 Jackson, TypeReference<T>, Class<T>, ParameterizedType 등등
[Java] ObjectMapper (2) TypeReference, 설정메서드, 어노테이션
* TypeReference Jackson의 ObjectMapper에서 제공하는 클래스로역직렬화(deserialization) 과정에서 제네릭 타입 정보를 전달하기 위해 사용.** 단일 객체가 아닌 복잡한 타입인 경우, 런타임에 타입 정보가 사
phyho.tistory.com
자바의 리플렉션
JVM에 없는 제네릭 정보를 완벽히 복원하진 못하지만,
클래스 선언부에 남아 있는 정보를 Type 계열로 꺼내볼 수 있게 도와주는 도구.
Jackson, MapStruct, ModelMapper 와 같은 라이브러리에서 활용
[JAVA] 리플렉션 (Relection)
자바 프로그램이 실행 중에 클래스, 인터페이스, 메소드, 필드 등의 정보를 동적으로 탐색하고 조작할 수 있는 기능.주로 프레임워크나 라이브러리에서 사용. [ Class 클래스 ]자바에서 모든
phyho.tistory.com