블로그 이름

[JAVA] Reflection API 본문

개발/Java

[JAVA] Reflection API

Hide 2025. 2. 19. 00:24

오늘은 JAVA Reflection API 에 대해 알아보고자 한다.

 

리플렉션은 힙 영역에 로드된 Class 타입의 객체를 통해 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고, 인스턴스의 필드와 메소드를 접근 제어자와 상관없이 사용할 수 있도록 지원하는 .API이다.

JVM의 클래스 로더에서 클래스 파일에 대한 로딩을 완료한 후 클래스 타입 객체를 힙 영역에 로드한다. (new 키워드 x)

JAVA에서 동적으로 객체를 생성하는 기술이다.

 

사용법은 아래와 같다.

 

Class<?> test = Class.forName("java.lang.String");

System.out.println(test);

 

위 방법으로 가져온 class 타입의 인스턴스로 필드와 메소드를 사용할 수 있다.

 

Class<?> testPerson = Person.class;

// 필드 정보 가져오기

Filed[] fileds = testPerson.getDeclaredFileds();

for (Field field : fields)

  System.out.println(filed.getName());

//생성자 호출 및 인스턴스 생성

Constructor<?> constructor = testPersoon.getDeclaredConstructor(String.class, int.class);

constructor.setAccessible(true);

Object person = constructor.newInstance("name", 20);

// 메소드 호출

Method startMethodTest = testPerson.getDeclareMethod("startMethodTest");

startMethodTest.invoke(person);

 

getDeclaredFields 메소드로 필드 정보를 가져오고

getDeclaredConstructor 메소드로 생성자 정보를 가져온뒤

newInstance 메소드로 인스턴스를 생성한다.

이후 getDeclaredMethod 메소드를 사용하여 startMethodTest 메소드 정보를 가져와서 해당 메소드를 호출한다.

 

오늘은 Reflection API를 사용하여 클래스 정보를 알아내고 동적으로 인스턴스를 생성하여 메소드를 호출하는 방법을 알아보았다.