@Inherited//Annotation의 상속이 가능함 @Documented//JavaDoc 문서 추가 가능 @Retention(RetentionPolicy.RUNTIME)// 컴파일 이후에도 JVM에 의해서 참조가 가능 //@Retention(RetentionPolicy.CLASS) // 컴파일러가 클래스를 참조할 때까지 유효 //@Retention(RetentionPolicy.SOURCE) // 어노테이션 정보는 컴파일 이후 사라짐 (ex. lombok) @Target({ ElementType.PACKAGE, // 패키지 선언시 ElementType.TYPE, // 타입 선언시 ElementType.CONSTRUCTOR, // 생성자 선언시 ElementType.FIELD, // 멤버 변수 선언시 ElementType.METHOD, // 메소드 선언시 ElementType.ANNOTATION_TYPE, // 어노테이션 타입 선언시 ElementType.LOCAL_VARIABLE, // 지역 변수 선언시 ElementType.PARAMETER, // 매개 변수 선언시 ElementType.TYPE_PARAMETER, // 매개 변수 타입 선언시 ElementType.TYPE_USE // 타입 사용시 }) public@interface CustomAnnotation { //interface에 @를 붙여주면 Annotation으로 등록 /* enum 타입을 선언할 수 있습니다. */ publicenumQuality {BAD, GOOD, VERYGOOD} /* String은 기본 자료형은 아니지만 사용 가능합니다. */ String value(); /* 배열 형태로도 사용할 수 있습니다. */ int[] values(); /* enum 형태를 사용하는 방법입니다. */ Quality quality()default Quality.GOOD; }