JAVA/JAVA 관련

Java Reflection 설명 및 사용법

반응형

자바는 Reflection이라는 언어의 특징이다. 리플렉션은 자가 프로그램이 자기 자신을 조사하거나, “introspect”하는 것을 실행하거나, 프로그램의 내부 프로퍼티의 조작을 허락하는 것을 말한다.


예를 들어 멤버변수의 이름을 취득하여 조작할 수 있다.


1
2
3
4
5
6
7
8
9
try {
 Class c = Class.forName(args[0]);
            Method m[] = c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++)
            System.out.println(m[i].toString
 
catch (Throwable e) {
            System.err.println(e);
}
cs




이는 자바의 Stack 클래스에 대한 메소드 이름을 나열하고, 인수들과 반환 값을 나열 한 것이다.


또한, 전달받은 method를 가지고 해당 메소드가 가지고 있는 annotation을 가져 올 수 있다.


예를들어, 다음과 같이 정의된 annotation이 있다고 해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
@Target(ElementType.METHOD)
 
@Retention(RetentionPolicy.RUNTIME)
 
@Documented // JavaDoc에 추가
 
public @interface Anno {
 
 public String defaultVal()  default “OK”;
 
 public String val();
 
}
cs




해당 정보를 가져올때는 다음과 같은 방식을 사용하여 가져온다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Test {
 
 public Test() {
 
 }
 
 
 
 @Anno(val = “ddd”)
 
 public void test () {
 
 }
 
}
 
 
 
// 클래스에 정보읽기.
 
Test t = new Test();
 
Method methods[] = t.getDeclaredMethods();
 
 
 
 
for (Method method : methods) {
 
T myAnnot = method.getAnnotation(Anno.Class);
 
String defaultVal = ((Anno) myAnnot).defaultVal();
 
 String val = ((Anno) myAnnot).val();
 
}
 
 
cs


반응형