은은하게 코드 뿌시기

[java] @Target , @Retention/메타애너테이션 본문

자바/자바 기본

[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
Comments