🙋 Reflection API란?

구체적인 클래스 타입을 알지 못해도 메서드, 타입, 변수 등 해당 클래스의 정보에 접근할 수 있게 해주는 Java API이다.

public class Member {
	private String name;
	private int age;

	public Member(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void memberTest() {
		System.out.println("test입니다.");
	}
}

 

public static void main(String[] args) {
    Object obj = new Member("kim", 10);
    obj.memberTest();    // 에러 발생
}

 

obj는 Object로 타입이 결정(java는 컴파일 시점에 타입이 결정되므로 여기서 obj는 Object로 타입이 결정된다.)됐으므로

Object 클래스 메서드, 변수들만 사용이 가능해서 Member클래스의 memberTest 사용 시 에러가 발생한다.

(Member 클래스의 구체적 타입을 모르기 때문이다.)

 

이때 Member클래스의 정보에 접근 가능하게 해주는 것이 Reflection API이다.

(* 사용법 참고 https://www.baeldung.com/java-reflection)

이런 동작이 가능한 이유는 JVM가 실행되면서 코드가 컴파일러에 의해 바이트 코드로 변환되고, static영역에 저장된다.

Reflection API는 이 static 영역에 저장된 정보를 활용하는 것이다.

 

그러나, 우리가 실제로 코드를 작성할 때는 구체적인 클래스를 모르는 일은 거의 없다.

따라서 애플리케이션 개발보다 프레임워크나 라이브러리에서 많이 사용된다.

 

+ Recent posts