티스토리 뷰

Java

Java - Annotation Reflection

엔꾸꾸 2019. 10. 24. 21:58

Annotation Reflection

Annotation

애노테이션은 JEE5 부터 추가된 기능이다.

애노테이션은 다양한 목적으로 사용되지면 주로 메타 데이터의 비중이 가장 크다.

메타 데이터(Meta-Data): 데이터를 위한 데이터, 한 데이터에 대한 설명을 의미한다

MyAnnotation

@Retention

  • 컴파일러가 애노테이션을 다루는 방법을 기술하며, 어느 시점까지 정보를 유지할것인지 결정한다.
  • RetentionPolicy.SOURCE : 컴파일 전까지만 유효. (컴파일 이후에는 사라짐)
  • RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효.
  • RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능. (리플렉션 사용)
  • 기본값은 CLASS

@Target

  • 애노테이션을 적용할 위치를 결정한다.
  • ElementType.PACKAGE : 패키지 선언
  • ElementType.TYPE : 타입 선언
  • ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
  • ElementType.CONSTRUCTOR : 생성자 선언
  • ElementType.FIELD : 멤버 변수 선언
  • ElementType.LOCAL_VARIABLE : 지역 변수 선언
  • ElementType.METHOD : 메서드 선언
  • ElementType.PARAMETER : 전달인자 선언
  • ElementType.TYPE_PARAMETER : 전달인자 타입 선언
  • ElementType.TYPE_USE : 타입 선언

@Inherited

  • 애노테이션을 상속이 가능하게 한다.
  • 애노테이션은 값들을 가질수 있는데 가질수 있는 데이터의 타입은 제한되어있다.
  • 기본형 타입과, enum, Wrapper 타입들만 속성으로 가질수 있다.
  • 해당 속성의 기본값도 지정이 가능하다.

속성을 지정하면 애노테이션을 사용할때 다음과 같이 속성에 값을 지정할수 있다.

만약 값을 받을 속성의 이름을 value 로 지정하면 속성명을 생략할 수 있다.

Reflection으로 Annotation 정보 참조하기

애노테이션은 기본적으로 주석과 동일한 취급을하기 때문에 바이트코드 로드시 해당 애노테이션의 정보는 제외하고 로드된다.

  • Reflection으로 해당 정보를 참조 할 수 없다.

Reflection으로 해당 정보를 참조하고 싶다면 (애노테이션의 정보를 RUNTIME시 까지 유지) @Retention을 사용하여 해당 애노테이션 정보를 언제까지 유지할것인지 지정해 주어야한다.

getAnnoitations()

  • 상위 클래스의 상속가능한 애노테이션 정보 까지 참조한다.

getDeclaredAnnotations()

  • 타겟 클래스의 애노테이션 정보만 참조한다.

'Java' 카테고리의 다른 글

Java - DI Container 만들어보기  (0) 2019.11.06
Java - Reflection 클래스 정보 수정 또는 실행하기  (0) 2019.11.04
Java - Reflection  (0) 2019.10.21
Java - Javaagent  (0) 2019.10.17
Java - 모자에서 토끼를 꺼내는 마술  (0) 2019.10.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함