본문 바로가기

개발기술/Java

Java 리플렉션, 제네릭

Class<T>

  • 클래스 자체도 객체로 표현한 것으로, 특정 타입(T)의 Class 객체를 의미해요. 
  • 해당 클래스의 정의(필드, 메서드 등)에 대한 정보를 담은 객체를 반환합니다.
Class<?> clazz = String.class;

System.out.println(clazz.getName()); // java.lang.String
System.out.println(clazz.getDeclaredFields()); // 필드 정보들

 

리플렉션

  • 클래스, 필드, 메서드, 생성자 등의 정보를 런타임에 동적으로 조회하거나 조작할 수 있게 해주는 기능
    • 즉, Java에서 "클래스나 메서드 등의 정보를 코드로 다루는 기능"이에요.
  • 이 모든 건 Class 객체를 통해 시작됨

정적(static) 인스턴스 생성 방식

컴파일 타임에 타입이 명확히 정해져 있어요. 

HolidayResponse res = new HolidayResponse();​
 

 

런타임 인스턴스 생성방식

 아래와 같이 클래스 타입을 변수로 다루고, newInstance()로 객체도 만들 수 있음

Class<?> clazz = HolidayResponse.class;
Object obj = clazz.getDeclaredConstructor().newInstance();

제네릭 타입

 

부분 의미
<T> 👉 "이 메서드는 제네릭 타입 T를 사용한다선언 
T 👉 반환 타입 — 위에서 선언한 제네릭 T를 실제 반환하겠다는 의미

 

  • 파라미터로만 T를 사용하는 경우
public <T> void printItem(T item) {
    System.out.println(item);
}

 

  •  
public <T> T getValue()