[Java] Annotation 놀이 - part.2 reflect??
어노테이션을 가지고 놀기 위해서는 Java refect 가 필수적이다.
분석 들어갑니다.
more..
java.lang.Class
이름에도 느낄 수 있듯이 클래스의 클래스입니다.
몇가지 쓸만한 메소드들을 나열합니다.
ㅁ getAnnotation(Class annotationClass)
- 클래스의 해당 어노테이션을 반환합니다. 없으면 null 을 반환
ㅁ getAnnotations()
- 모든 어노테이션들을 반환합니다.
ㅁ getConstructor(Class... parameterTypes), getConstructors()
- 생성자를 반환합니다.
ㅁ getField(String name), getFields()
- 프로퍼티을 반환합니다. (public 으로 선언된.. 상속받은 필드들도 반환됩니다.)
ㅁ getMethod(String name), getMethods()
- 메소드를 반환합니다.
ㅁ getDeclaredXXXXX()
- 위 메소드들은 상속받은 것들도 반환하지만 이런 메소드들은 해당 클래스 소스에 정의된 것들만 반환합니다.
예를 들어 getField 로는 private 프로퍼티를 가지고 올 수 없지마녀 getDeclaredField 로는 private 프로퍼티에
접근할 수 있습니다. (이거 찾느라 쪼끔 고생을...)
java.lang.reflect.Method
메소드 클래스 입니다.
ㅁ getModifires()
- 메소드의 접근 지정자를 반환 (private, protected, public ...)
ㅁ getParameterTypes()
- 메소드 파라미터의 타입을 반환합니다.
ㅁ ★★ invoke(Object obj, Object... args)
- 메소드를 실행시킵니다. 첫번째인자는 실행을 할 객체를 넘겨주고 두번째 인자부터는 메소드의 파라미터를 주르륵...
제일 중요한 메소드죠 ㅋㅋㅋ
java.lang.reflect.Field
... 설명은 따로 안해도..
ㅁ get(Object obj)
- public 프로퍼티의 값을 가지고 올 때 사용합니다. 접근만 할 수 있다면 프로퍼티 값을 얻어올 수 있습니다.
위의 메소드들만 알고 있어도 어노테이션 가지고 노는데는 충분합니다.
이클립스에서 contents assist 를 이용하면 필요한 메소드들을 확인가능!!!!
이제 슬슬 난이도를 올려볼까나...
댓글
댓글 쓰기