[Java] Reflection Tutorial - Class |
Java Reflection 은 class, interface, field, 그리고 method 를 runtime 에 조사할 수 있도록 해준다.
새로운 object 를 만들 수도 있고, method 를 호출할 수도 있다.
script language 가 runtime 에 java 의 함수를 호출한다거나, database table 과 object 를 맞출 때 자주 사용한다.
Class
Class 로 부터 얻을 수 있는 정보들.
Class Name
Class Modifier ( public, private, synchronized... )
Pakcage Info
Super class
Implemented Interfaces
Constructors
Methods
Fields
Annotations
등등..
Class Object
Class Reflection 을 이용하려면 우선 java.lang.Class 객체가 필요하다.
만약 class name을 runtime 에 알 수 있다면 아래와 같이 객체를 얻을 수 있다.
Class testClass = TestClass.class;
만약 runtime 에 class 이름을 알 수 있다면 다음과 같이 얻어올 수 있다.
이 때 package name 이 포함된 full class name 이 기술되어야 한다.
Class testClass = Class.forName( "com.test.testClass" );
forName 함수는 ClassNotFoundException 을 던질 수 있다.
Class Name
aClass.getName(); // with packageName
aClass.getSimpleName(); // without package name
Modifier
int aClass.getModifiers();
Modifier.isAbstract( int modifiers )
Modifier.isFinal( int modifiers )
Modifier.isInterface( int modifiers )
Modifier.isNative( int modifiers )
Modifier.isPrivate( int modifiers )
Modifier.isProtected( int modifiers )
Modifier.isPublic( int modifiers )
Modifier.isStatic( int modifiers )
Modifier.isStrict( int modifiers )
Modifier.isSynchronized( int modifiers )
Modifier.isTransient( int modifiers )
Modifier.isVolatile( int modifiers )
Package Info
Package package = aClass.getPackage();
Package 를 통해서 Manifest 에 정의된 version 정보 등에 접근할 수도 있다.
SuperClass
Class superClass = aClass.getSuperclass();
Implemented Interfaces
Class[] interfaces = aClass.getInterfaces();
super class 가 implement 한 녀석은 return 되지 않는다.
Constructors
Constructor[] constructores = aClass.getContructors();
Methods
Method[] method = aClass.getMethods();
Fields
Field[] field = aClass.getFields();
Annotations
Annitation[] annotations = aClass.getAnnotations();
댓글