본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] Reflection Tutorial - Class

by 돼지왕 왕돼지 2013. 11. 12.
반응형

 [Java] Reflection Tutorial - Class



[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();



반응형

댓글