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
'Dev.BackEnd > JAVA' 카테고리의 다른 글
[Java Adv] 16. Lambda Expression + Inner class, anonymous class (0) | 2016.10.25 |
---|---|
[JAVA] 15. Thread ( 스레드 ) (0) | 2016.08.20 |
[JAVA] 14 - 1. Collection Framework(컬렉션 프레임워크) - List (0) | 2016.07.17 |
[JAVA] 13. 열거형 Enum (0) | 2016.07.16 |
[JAVA] 12. Generics (지네릭스) (0) | 2016.07.16 |