반응형
자바는 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 |
반응형
'JAVA > JAVA 관련' 카테고리의 다른 글
HashMap에서 사용되는 인스턴스 객체의 equals()와 hashCode() 재 정의 중요성 (0) | 2018.05.28 |
---|---|
자바 Annotation 만들기 (0) | 2018.05.28 |
Java 문자열의 toString과 valueOf의 차이 (0) | 2018.05.28 |
인스턴스 메소드와 정적 메소드 (0) | 2016.12.22 |
자바 매개변수 전달 방식(call by value, call by reference) (0) | 2016.12.22 |