RTTI(Run-Time Type Information)
: Java에선 jar라는 툴을 이용해서 서로 다른 class를 jar 파일로 만들어 줌.
자바 프로그램의 런타임 중에 타입 정보를 알아낼 수 있으며 사용 또한 가능.
런타임 시에 객체와 클래스의 정보를 알아내는 방법.
OOP의 다형성은 전통적으로 RTTI로 자바 컴파일 시의 상속 구조를 파악해 동작하는 원리.
RTTI 필요성: 다형성을 사용하는 클래스 상속 구조 참조.
annotation : 자바 클래스 파일에 메타 정보를 기술해 메타 정보를 프로그래밍에 활용하는 방식
인터페이스와 거의 같음.
Java Reflection :
동적으로 이름(String)을 이용해 Java Class를 다루는 방법.
메모리에 올리는 걸 클래스 로더 ->> 자바 클래스의 이름을 이용해 클래스를 메모리에 불러와서 class의 객체 생성.
class의 method나 field를 이름과 signature를 이용해 획득한 후, 함수 호출 또는 값의 설정 및 획득.
똑같은 이름의 메소드 여러 개 정의 가능(오버로딩 - 파라미터는 달라야 함(시그니처))
Class class :
Java의 Class 파일을 나타내는 class로 Class.forName()과 같은 함수를 이용해 Class를 얻음.
Class의 newInstance() 함수를 이용해 객체 생성.
Class가 메모리에 로딩되어 있지 않으면 ClassLoader를 이용해 메모리에 Class 로딩.
Method Class :
class에 정의된 함수를 나타내는 class로서 Class 객체의 getMethod
()를 호출해 획득.
getDeclareMethod()로 protected나 private method도 얻을 수 있음.
invoke()로 함수 호출.
Field :
class에 정의된 field를 나타내는 class로서 Class 객체의 getField()를 호출해 획득.
get(), set() 함수를 이용해 값을 설정하거나 얻어 올 수 있음.
Class 획득 :
객체의 생성 :
ClassLoader : 어노테이션 적용 가능
Method :
implemented Interface를 동적으로 사용 ->> proxy
Invocation Handler 사용해주기
Annotation Check :