Language/Java

Reflection(리플렉션)이란?

지팡구 2023. 4. 1. 01:58

리플렉션(Reflection)이란?

리플렉션은 JVM 메모리 내에 저장된 클래스의 정보를 가지고와서 필요한 정보를 사용하는 자바 API입니다.

(여기서 말하는 클래스는 실행중인 자바 어플리케이션의 클래스와 인터페이스의 정보를 가진 클래스)

 

JVM에 의해 클래스가 자동으로 생성되고, 이 Class를 가지고 오는 방법은 다음과 같습니다.

출처 : [10분 테코톡]파랑,아키의 리플렉션

 

 

Class의 메서드 사용시 주의점은 다음과 같습니다.

getMethods와 getDeclaredMethods를 구분할 것

이유는 getMethods같은경우엔 상위 클래스와 상위 인터페이스에서 상속한 메서드를 포함하여 pulblic인 메서드를 모두 거지고 옵니다. 그러나 getDeclaredMethods는 접근 제어자와 상관없이 상손한 메서드를 제외하고 직접 클레스에서 선언한 메서드를 모두 가지고오기 때문입니다. 

 

 

일반적으로 메소드를 호출하면 컴파일 시점에 분석된 클래스를 사용하는데, 리플렉션은 런타임에서 클래스를 분석하기에 속도가 느립니다. 또한 런타임에서 클래스를 분석함으로써 타입 체크가 컴파일 타임에 불가능합니다.