오늘은 애너테이션의 개념에 대해 배운 내용을 정리해보려 한다.
우선 메타 에너테이션 종류에 대해 알아보자
@Target
@Target(ElementType.ANNOTATION_TYPE) | 어노테이션 |
@Target(ElementType.CONSTRUCTOR) | 생성자 |
@Target(ElementType.FIELD) | 필드(멤버 변수, Enum 상수) |
@Target(ElementType.LOCAL_VARIABLE) | 지역변수 |
@Target(ElementType.METHOD) | 메서드 |
@Target(ElementType.PACKAGE) | 패키지 |
@Target(ElementType.PARAMETER) | 매개변수(파라미터) |
@Target(ElementType.TYPE) | 타입(클래스, 인터페이스, Enum) |
@Target(ElementType.TYPE_PARAMETER) | 타입 매개변수(제네릭과 같은 매개변수) |
@Target(ElementType.TYPE_USE) | 타입이 사용되는 모든 대상 |
@Retention
@Retention(RetentionPolicy.SOURCE) | 자바 소스 파일에 존재하는 것으로 컴파일 이후 클래스 파일이 되면 사라짐 |
@Retention(RetentionPolicy.CLASS) | .class 파일에 존재하지만 런타임에는 사라짐(기본값) |
@Retention(RetentionPolicy.RUNTIME) | 런타임 까지도 존재한다 |
@Inherited
@Documented
@Repeatable
다음 표준 애너테이션 종류에 대해 알아보자
표준 애너테이션
@Override : 컴파일러에게 메서드를 오버라이딩하는 것이라고 알림
@Deprecated : 앞으로 사용하지 않을 대상을 알릴 때 사용
@FunctionalInterface : 함수형 인터페이스라는 것을 알림
@SuppressWarning : 컴파일러가 경고메세지를 나타내지 않음