Java
Java 어노테이션
asd135
2025. 4. 6. 20:15
728x90
어노테이션을 사용하는 이유
어노테이션은 클래스, 메서드, 필드, 매개변수 등 다양한 요소에 추가 정보를 부여하여, 프로그램의 동작이나 구조를 설명하는 데 사용된다.
1. 코드에 메타데이터를 추가
2. 코드의 가독성을 항샹
3. 프레임워크에서는 설정을 간소화하는 기능
어노테이션 정의
1. 어노테이션은 인터페이스 형태로 정의해야하며 클래스나 추상 클래스로 정의 할 수 없다.
2. 어노테이션의 속성은 메서드의 형태로 정의할 수 있지만 메서드는 구현 할 수 없다. 어노테이션은 메타데이터를 제공하는 것이기 때문에, 속성은 이름과 타입만 정의되고 실제 구현은 필요하지 않다.
3. 속성의 타입으로는 원시 타입, String, Class, enum, 다른 어노테이션, 배열 등으로 정의할 수 있다.
import java.lang.annotation.ElementType; // 어노테이션이 적용될 수 있는 대상을 정의하는 열거형
import java.lang.annotation.Retention; // 어노테이션의 유지 정책을 정의하는 어노테이션
import java.lang.annotation.RetentionPolicy; // 유지 정책을 정의하는 열거형
import java.lang.annotation.Target; // 어노테이션의 적용 대상을 지정하는 어노테이션
// 어노테이션 정의
@Retention(RetentionPolicy.RUNTIME) // 런타임 동안 어노테이션 정보를 유지
@Target({ElementType.METHOD, ElementType.TYPE}) // 메서드와 클래스에 적용 가능
public @interface MyAnnotation {
String value(); // 속성 정의 (구현 없음)
int count() default 1; // 기본값을 가진 속성 정의 (구현 없음)
}
소스 코드가 컴파일되면 어노테이션은 바이트코드로 변환되어 .class 파일에 저장
import java.lang.reflect.Method;
@MyAnnotation(value = "어노테이션", count = 5)
public class Main {
@MyAnnotation(value = "Example Method", count = 111)
public void exampleMethod() {
System.out.println("aa");
}
public static void main(String[] args) {
// 클래스에 적용된 어노테이션 정보 출력
Class<Main> obj = Main.class;
if (obj.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation annotation = obj.getAnnotation(MyAnnotation.class);
System.out.println("Class Annotation: value = " + annotation.value() + ", count = " + annotation.count());
}
// 메서드에 적용된 어노테이션 정보 출력
try {
Method method = obj.getMethod("exampleMethod");
if (method.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation methodAnnotation = method.getAnnotation(MyAnnotation.class);
System.out.println("Method Annotation: value = " + methodAnnotation.value() + ", count = " + methodAnnotation.count());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
// 메서드 호출
Main example = new Main();
example.exampleMethod();
}
}