Annotation이란?
어노테이션은 적용된 소스코드에 추가적인 메타데이터를 할당한다.
메서드, 인터페이스, 클래스, 필드에 붙어서 :
- 컴파일러에게 경고과 에러를 알려준다.
- 컴파일 시점에 소스코드를 조작한다.
- 런타임 시점에 동작을 수정하거나 검증한다.
Annotation의 종류
Built-in annotation
자바 언어에 포함된 기본 제공 어노테이션에는 @Override
, @SuppressWarnings, @Deprecated
, @SafeVarargs
, @FunctionalInterface
, @Native
이 있다.
Meta-annotation
메타 어노테이션은 다른 어노테이션에 적용할 수 있는 어노테이션이다.
@Retention
: 어노테이션의 유지 범위를 설정
RetentionPolicy.SOURCE
: 컴파일 전까지만 유효, 컴파일러에 의해 삭제됨RetentionPolicy.CLASS
: 컴파일러가.class
파일 생성 시 작성, 런타임 환경에서는 삭제됨RetentionPolicy.RUNTIME
: 런타임(JVM)에도 유지, Reflection으로 접근 가능
@Target
: 어노테이션의 적용 대상를 설정
ANNOTATION_TYPE
: 어노테이션 인터페이스 선언CONSTRUCTOR
: 생성자 선언FIELD
: 필드 선언 (열거형 상수 포함)LOCAL_VARIABLE
: 로컬 변수 선언METHOD
: 메서드 선언MODULE
: 모듈 선언PACKAGE
: 패키지 선언PARAMETER
: 메서드 매개변수 선언RECORD_COMPONENT
: 레코드 컴포넌트 선언TYPE
: 클래스, 인터페이스 (어노테이션 인터페이스 포함), 열거형 또는 레코드 선언TYPE_PARAMETER
: 타입 매개변수 선언TYPE_USE
: 타입 사용 위치 (예: 제네릭 타입, 배열, 타입 캐스팅 등)
@Inherited
: 어노테이션을 하위 클래스까지 적용@Documented
: JavaDoc에 포함@Repeatable
: 어노테이션을 연속적으로 작성 가능
Custom annotation
사용자에 의해 정의된 어노테이션
Custom Annotation 적용
Annotation 정의
@Retention(RetentionPolicy.RUNTIME) // 런타임에서도 어노테이션 접근 가능
@Target(ElementType.TYPE) // 클래스나 인터페이스에만 적용 가능
public @interface MyAnnotation {
String key() default "default-key"; // 기본값 제공
}
Annotation 적용
@MyAnnotation(key = "CustomValue") // 어노테이션에 값 지정
public class MyClass {
// 클래스 구현
}
Annotaion 처리
Reflection을 사용하여 런타임에 클래스의 어노테이션 정보를 읽고 처리합니다.
import java.lang.annotation.Annotation;
public class AnnotationProcessor {
public static void main(String[] args) {
// 클래스 객체 가져오기
Class<MyClass> myClass = MyClass.class;
// 어노테이션 확인
if (myClass.isAnnotationPresent(MyAnnotation.class)) {
// 어노테이션 읽기
MyAnnotation annotation = myClass.getAnnotation(MyAnnotation.class);
// key 값 출력
System.out.println("Annotation Key: " + annotation.key());
} else {
System.out.println("MyAnnotation is not present.");
}
}
}
결과값
Annotation Key: CustomValue
'Spring 단기심화 2기' 카테고리의 다른 글
TIL_MapStruct Mapping 오류_250102 (1) | 2025.01.03 |
---|---|
TIL_MapStruct_241219 (1) | 2024.12.20 |
TIL_JVM 구조와 동작 원리_241208 (3) | 2024.12.09 |
TIL_HTTP 메서드의 멱등성_241205 (0) | 2024.12.05 |
TIL_대규모 스트림 처리에서의 데이터 일관성 유지_241205 (0) | 2024.12.05 |