/ JAVA

어노테이션 (Annotation)

프로그램에게 추가적인 정보를 제공해주는 메타데이터(metadata)이다.

  • 컴파일러에게 코드 작성 문법에러 체크하도록 정보제공
    • ex) Override
  • 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
    • ex) XML 설정 파일을 자동 생성한다거나 배포를 위한 JAR 압축 파일을
      자동생성가능
  • 실행시(런타임시) 특정 기능을 실행하도록 정보 제공
    • ex) Servlet 이나 Controller 객체 사용시

기본 엘리먼트 value

public @interface AnnotationName{
String value;
int elementName() default 5;
}
    어노테이션을 적용할때 엘리먼트명을 생략가능
  • @AnnotationName("값입니다") //value에 "값입니다" 저장
    두개 이상의 속성을 기술할때는 value=값 형태로 기술
  • @AnnotationName(value="값입니다", elementName = 4);

어노테이션 적용대상

  • java.lang.annotationElementType 열거 상수로 정의


어노테이션 적용 대상 방법

  • @Target 어노테이션으로 적용대상지정
//예시
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface AnnotationName{
}

어노테이션 유지정책

  • 어노테이션 적용 코드가 언제까지 유지될것인가를 기술한것
  • java.lang.annotation.RetentionPolicy 열거 상수로 정의되어 있음
RetenionPolicy 열거 상수 설명
SOURCE 바이트코드에서는 어노테이션이 유지되지 않는 정책, 개발자가 소스에서
어떤 정보를 얻을 목적으로 유지하는 정책
CLASS 컴파일러가 바이트 코드를 만들때 까지는 유지
그러나 어노테이션의 값을 클래스 실행시 얻을 수 없다.
클래스상에서만 존재하고 실제 실행시 정보를 읽지 못하는 정책
RUNTIME 바이트 코드 까지 유지가 되고
바이트 코드파일을 로딩을 시키고 나서 실제프로그래밍 실행시
어노테이션의 정보를 읽고 이용을 할 수 있도록 하는 유지정책
대부분사용

리플렉션(reflection): 런타임에 클래스의 메타 정보를 얻는 기능

  • 클래스가 가진 필드, 생성자, 메소드, 어노테이션 정보을 얻을 수 있다.
  • Runtime(실행중에) 어노테이션 정보를 얻으려면 유지 정책을 RUNTIME으로 설정해야됨

유지 정책 지정방법

  • @Retention 어노테이션으로 유지정책을 지정
  • @Retention의 기본 엘리먼트인 value의 타입은 RetentionPolicy
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationName{
}

References.