언어(Language)/Java

[Java] 자바 사용자 정의 어노테이션(Custom Annotation) 개념 정리 및 활용

잇트루 2022. 9. 24. 02:00
반응형

사용자 정의 어노테이션 (Custom Annotation)

사용자가 직접 정의하여 사용하는 어노테이션이다. 프레임워크나 API 등을 만들어 사용할 때 주로 사용한다.

 

사용자 정의 어노테이션 정의

사용자 정의 어노테이션을 사용하기 위해 @interface를 통해 어노테이션 클래스를 작성할 수 있다.

어노테이션은 내부에 값을 가질 수 있으며, 값을 설정할 수 있다. 값을 설정하기 위해서는 default 값 형태로 설정한다.

import java.lang.annotation.*;

// 메타 어노테이션을 활용하여 사용자 정의 어노테이션 선언
@Target(ElementType.TYPE) // 어노테이션 적용 대상 Type으로 설정
@Retention(RetentionPolicy.RUNTIME) // 런타임 시까지 어노테이션을 사용
public @interface CustomAnnotation {
    int age() default 20; // default로 20 설정
    String name();
}

 

사용자 정의 어노테이션 사용

import java.lang.annotation.*;

// 어노테이션 값을 사용하기 위한 클래스 생성
@CustomAnnotation(name = "홍길동") // 사용과 동시에 값 설정 가능
class MyInfo {
}

public class PrintMyInfo {
    public static void main(String[] args) {
        PrintMyInfo myInfo = new PrintMyInfo();
        myInfo.print(new MyInfo());
}

void print(MyInfo myInfo) {
    Annotation[] annotations = MyInfo.class.getDeclaredAnnotations();
        for(Annotation i : annotations) {
            if (i instanceof CustomAnnotation) {
                CustomAnnotation customAnnotation = (CustomAnnotation) i;
                System.out.println(customAnnotation.name() + " " + customAnnotation.age());
            }
        }
    }
}
// 출력
홍길동 20

 

사용자 정의 어노테이션을 선언할 때 메타 어노테이션을 함께 사용할 수 있다.

@Target

어노테이션을 정의할 때 적용 대상을 지정하는 데 사용한다.

 

@Documented

어노테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.

 

@Inherited

어노테이션이 하위 클래스에 상속되도록 한다.

 

@Retention

어노테이션이 유지되는 기간을 정하기 위해 사용한다.

 

@Repeatable

어노테이션을 반복해서 적용할 수 있도록 한다.

반응형