[Java] 커스텀 @Interface 사용 방법

iniestar·2022년 1월 24일
0

Java에서 제공하는 어노테이션 외에 사용자가 커스텀하여 사용할 수 있는 어노테이션이 있다. 바로 @interface라는 어노테이션이다. 이 @interface는 클래스 또는 변수를 특정 값으로 지정하여 관리할 수 있다는 장점이 있다.

1. @interface 어노테이션의 정의
@interface의 기본 포맷과 함께 사용되는 @Retention@Target 어노테이션 옵션들의 정의는 다음과 같다. 아래 포맷으로 어노테이션 클래스가 된다!

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Authenticator {
int sortOrder() default 0;
}
  • @Retention : @interface 어노테이션의 적용범위로 어떤 시점까지 사용될 지 결정하는 옵션이다.

    • Class : Default값으로 클래스파일에는 포함되지만 JVM이 로드하진 않는다.
    • Runtime : 클래스 파일에 포함되고, JVM이 로드해서 사용한다.
    • Source : 컴파일할 때만 사용하고, 클래스파일에는 포함되지 않는다.
  • @Target : @interface 어노테이션의 적용 위치를 설정하는 옵션이다.

    • Type : 클래스 및 인터페이스
    • FIELD : 클래스의 멤버 변수
    • METHOD : 함수
    • PARAMETER : 파라미터
    • CONSTRUCTURE : 생성자
    • LOCAL_VARIABLE : 지역 변수
    • ANNOTATION_TYPE : 어노테이션 타입
    • PACKAGE : 패키지
    • TYPE_PARAMETER : 타입 파라미터
    • TYPE_USE : 타입 사용

2. @interface 어노테이션의 적용 방법

클래스 또는 변수에 @interface를 적용하므로써 마치 라벨이 붙는것 처럼 특정 타입으로 지정된다. 그러면 우리는 해당 타입을 검색하여 값을 가져오거나 타입별로 실행이 가능하다.

@Authenticator(
	authTargetType = AuthType.PASSWORD,
	authMethod = 0,
	sortOrder = 0
    )
public class OtpAuthenticator {

위 코드에서는 클래스가 갖고있는 @Authenticator 커스텀 어노테이션의 authTargetType 값이 PASSWORD로 지정되어 있는걸로 보아 Password 인증을 시도할 경우 해당 클래스를 찾아 로직을 분기 시킬 수 있다. 또한, 순서번호를 지정하여 번호 정렬 후 순서대로 실행가능한 형태로도 실행이 가능하다.

3. 어노테이션 클래스 검색 방법
그럼 특정 어노테이션 클래스를 검색하는 방법은 무엇일까? 정답은 Spring에서 제공하는 ApplicationContext에 있다.

@Autowired
ApplicationContext applicationContext;

public getAnnotation() {
String[] beanNames = application.getBeanNamesForAnnotation(Authenticator.class)

profile
while(true) { 손가락 관절염++ };

0개의 댓글