소스코드에 메타 데이터를 넣어주는 기능을 한다. 강사님께서는 마법같은 일을 해준다고 표현했다. 예를 들어 Override, RestController처럼 컴파일러에게 문법 체크를 하도록 알리는 기능도 한다.
[ Meta 어노테이션의 종류 ]
Retention: 해당 어노테이션의 정보를 어느 범위까지 유지할 것인지를 설정함
RetentionPolicy.SOURCE: 컴파일 전까지만 유효하며 컴파일 이후에는 사라짐
RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할 때까지 유효함
RetentionPolicy.RUNTIME: Reflection을 사용하여 컴파일 이후에도 JVM에 의해 계속 참조가 가능함
Documented: JavaDoc 생성 시 Document에 포함되도록 함
Target: 해당 어노테이션이 사용되는 위치를 결정함
ElementType.PACKAGE : 패키지 선언시
ElementType.TYPE : 타입 선언시
ElementType.CONSTRUCTOR : 생성자 선언시
ElementType.FIELD : 맴버 변수 선언시
ElementType.METHOD : 메소드 선언시
ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언시
ElementType.LOCAL_VARIABLE : 지역 변수 선언시
ElementType.TYPE_PARAMETER : 매개 변수 타입 선언시
Inherited: 해당 어노테이션을 하위 클래스에 적용함
Repeatable: Java8부터 지원하며, 연속적으로 어노테이션을 선언하는 것을 허용함
출처: https://mangkyu.tistory.com/130 [MangKyu's Diary:티스토리]