본문 바로가기

Dev.BackEnd/JAVA

#Reflection 리플렉션이란?




Reflection

What?
객체를 통해 클래스의 정보를 분석해 내는 프로그래밍 기법을 말한다.
구체적인 클래스 타입을 알지 못해도, 컴파일된 바이트 코드를 통해
역으로 클래스의 정보를 알아내어 클래스를 사용할 수 있다는 것이다.

리플렉션 기법을 통해서 형을 모르는 상태에서 객체의 메서드를 호출할 수 있다.

동적 바인딩이 되지 않던 자바에서 리플렉션이라는 프로그래밍 기법을 통해 동적 바인딩을 제공하는 것이다.

Why?
Composition 과 함께 사용되어 다형성을 구현하기 위해 사용된다.
조합을 사용하여 교체할 수 있는 위임 클래스를
리플렉션을 통해 동적/정적으로 생성하고 교체하는 방식으로 사용된다.
프레임워크에서 유연성을 위해 자주 사용되는 방식이다.

자바의 모든 타입은 연관된 Class 객체를 갖고 있다.
컴파일 타임에 클래스의 이름을 알 수 있다면, Class 객체를 얻을 수 있다.

How?
1
2
3
4
Class aClass = Test.class;
 
Class myObjectClass = Class.forName(className);
Package packageOfaClass = aClass.getPackage( );
cs

Where?
JDBC> Class.forName( );
클래스 이름을 통해서 클래스를 동적로딩하는 메소드이다.
runtime시에 동적으로 원하는 라이브러리를 로딩할 수 있는 장점이 있지만
컴파일 time에 detection이 안되 runtime시 죽을 수 있는 단점이 존재한다.
그리고 동적 로딩이 더 느리다.



- The End