본문 바로가기

카테고리 없음

Annotation

  • 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
  • 예를들어, @Test는 이 메서드를 테스트해야 한다는 것을 테스트 프로그램에게 알리는 역할을 한다.

표준 애너테이션

메타 애너테이션

@Target

  • 애너테이션이 적용가능한 대상을 지정하는데 사용된다.
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
	String[] value();
}

@Retention

  • 애너테이션이 유지(retention)되는 기간을 지정하는데 사용된다.

  • SOURCE는 컴파일러가 사용하는 애너테이션을 뜻한다. 컴파일러를 직접 작성할 것이 아니면 쓸 일 없다.
  • RUNTIME은 실행 시에 reflection을 통해 클래스 파일에 저장된 애너테이션 정보를 읽어서 처리할 수 있다.
  • CLASS는 컴파일러가 애너테이션 정보를 클래스 파일에 저장할 수 있게는 하지만, 클래스 파일이 JVM에 로딩될 때는 애너테이션의 정보가 무시되어 실행 시에 애너테이션에 대한 정보를 얻을 수 없다. 그래서 잘 안 쓴다.

@Documented

  • 애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 한다.

@Inherited

  • 애너테이션이 자손 클래스에 상속되도록 한다.

애너테이션 요소의 규칙

@interface AnnoTest {
    int id = 100;                     // OK. 상수 선언. static final int id = 100;
    String major(int i, int j);       // 에러. 매개변수를 선언할 수 없음
    String minor() throws Exception;  // 에러. 예외를 선언할 수 없음
    ArrayList<T> list();              // 에러. 요소의 타입에 타입 매개변수 사용불가