자바/자바 기본
[java] @Target , @Retention/메타애너테이션
은은하게미친자
2022. 12. 1. 15:31
728x90
@Target, @Retention 애너테이션은 메타 애너테이션에 해당된다.
메타 애너테이션 이란?
:애너테이션을 위하 애너테이션, 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의 할때
애너테이션의 적용대상이나 유지기간등을 지정하는데 사용된다.
@Target
: 애너테이션이 적용가능한 대상을 지정하는데 사용된다.
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUNCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings{ String[] value; } |
@SuppressWarnings 를 정의한 예제 |
대상타입 | 의미 |
ANNOTATION_TYPE | 애너테이션 |
CONSTRUCTOR | 생성자 |
FIELD | 필드(멤버변수, enum상수), 기본형 |
LOCAL_VARIABLE | 지역변수 |
METHOD | 메서드 |
PACKAGE | 패키지 |
PARAMETER | 매개변수 |
TYPE | 타입(클래스, 인터페이스, enum) 타입을 선언할때, 애너테이션을 붙일 수 있음. |
TYPE_PARAMETER | 타입 매개변수 |
TYPE_USE | 타입이사용되는 모든곳 , 참조형 해당 타입의 변수를 선언할 때 붙일수있다. |
@Retention
: 애너테이션이 유지 되는 기간을 지정하는데 사용된다. 애너테이션의 유지정책 (RetentionPolicy) 의 종류는
아래와같다
SOURCE | 소스 파일에만 존재, 클래스 파일에는 존재하지 않음 -> 컴파일러가 사용하는 애너테이션 |
CLASS | 클래스 파일에 존재, 실행시 사용불가, 기본값 -> 클래스파일이 JVM에 로딩뙬 떄는 애너테이션의 정보가 무시되어 실행 시에 애너테이션에 대한 정보를 얻을 수 없다. |
RUNTIME | 클래스 파일에 존재, 실행시 사용가능 -> 리플렉션 (reflection)을 통해 클래스 파일에 저장된 애너테이션의 정보를 읽어서 처리할 수있다. + 지역변수에 붙은 애너테이션은 컴파일러만 인식할 수 있으므로 , RUNTIME 인 애너테이션을 지역변수이 붙여도 실행시 인식되지 않는다. + JVM이 자바 바이트코드가 담긴 class 파일에서 런타임환경을 구성하고 런타임을 종료할 때까지 메모리는 살아있습니다. |
728x90