Wednesday, August 26, 2015

[What is java annotation 03] - Creating your Own Annotations?

3. Creating your Own Annotations

3.1. Annotation 선언 방법

Custom Annotation을 만들기 위해서는 class 또는 interface로 아래와 같이 코드가 구현되어야 합니다.

public @interface Man {
    boolean isMan() default true;
    int age();
    String name();
    String[] have();
}

위와 같이 Annotation을 선언한 뒤 아래와 같이 해당 값들을 입력해야 Annotation 사용이 가능합니다. "Default" value를 지정할 경우에는 따로 값을 지정하지 않아도 사용 가능합니다.

@Man( age = 99, name = "Francis Kim", have = { "cellphone", "watch" })
public class MyAnnotationUse {
    ...
}

3.2. Annotation 용도 지정방법

아래와 같이 @Retention Annotation을 추가하면 해당 Annotation에 대한 용도 지정이 가능합니다.

@Retention(RetentionPolicy.RUNTIME)
public @interface Man {
    ...
}

3가지의 종류가 있다.

  • SOURCE : 컴파일러가 사용하고 클래스 파일 안에 포함되지 않는 경우
  • CLASS : 컴파일시 클래스 파일 안에 포함되나 VM에서 무시하는 경우
  • RUNTIME : 컴파일시 포함되고 VM에서 인식 하는 경우가 있다

3.2. Annotation 범위 지정방법

ElementType에 8가지 범위가 선언이 가능하며, 선언되지 않은 범위에 대해 Annotation을 사용할 경우 해당 Annotation은 무시됩니다. 또한 타겟은 여러개 지정이 가능합니다.

@Target({ElementType.TYPE, ElementType.FIELD})
public @interface Man{
 ...
}
  • TYPE : 클래스, 인터페이스, Annotation, 또는 열거형 타입
  • FIELD : 필드 또는 열거형 타입의 값
  • METHOD : 메소드
  • PARAMETER : 메소드의 인자
  • CONSTRUCTOR : 클래스 생성자
  • LOCAL_VARIABLE : 메소드 내부 변수
  • ANNOTATION_TYPE : Annotation 타입
  • PACKAGE : 패키지

참고 논문 및 사이트

1. Java Annotation: 인터페이스 강요로부터 자유를… - http://www.nextree.co.kr/p5864/

2. Java Annotations - http://tutorials.jenkov.com/java/annotations.html

3. Annotation과 Reflection, 그리고 코드 속의 MetaData - http://kang594.blog.me/39704853

No comments:

Post a Comment