커스텀 애너테이션에 대하여..

SionBackEnd·2022년 8월 28일
0

Spring(봄)

목록 보기
12/22
post-thumbnail

커스텀 에너테이션의 필요

애너테이션을 사용하다보면 기존 애너테이션의 추가적인 기능까지 넣고 싶을 때 커스텀 애너테이션을 사용하게 된다.

사용법

애너테이션으로 클래스를 생성하고

@Constraint(validatedBy = {GenderValidator.class})
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidGender {
    String message() default "올바른 성별을 입력해주세요";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

이러한 형식으로 작성한다.

설명을 하자면 에너테이션을 만들때는 반드시 아래 3가지 메서드를 구현해야 한다.

  • message() : 실패시 공통적으로 메서지를 log에 띄어줌
  • groups() : 상황별 validation 제어를 위해 사용할 수 있다
  • payload() : 심각도를 나타낸다고 한다

하지만 아쉽게도 message()메소드를 제외하면 나머지들은 어떻게 사용하는지 감이 잡히지 않는다...

Constraint

@Constraint 어노테이션을 활용하면 사용자가 원하는 Constraint와 Validation을 만들어 이를 적용할 수 있다.

Target

@Target 어노테이션을 활용하면 적용될 범위를 지정할 수 있다.

Retention

@Retention 어노테이션을 활용하면 어노테이션이 어느레벨까지 유지되는지를 결정짓는다.

Validator클래스 생성

우리가 커스텀 애너테이션에 적용할 기능을 만들어주어야한다.

GenderValidator로 클래스를 생성하고 ConstraintValidator<>을 구현해야한다.
ConstraintValidator 인터페이스는 <A extends Annotation, T>로 구성되어있다.
그뒤 override를 initialize(), isValid()메서드들을 구현해야한다.

initialize메소드는 기능을 상속한 애너테이션을 그대로 쓰겠다는 메서드를 구현하면되고,
isValid메소드는 추가적인 기능을 넣어주면 되는것 같다.

참고한 웹사이트

참고 블로그

profile
많은 도움 얻어가시길 바랍니다!

0개의 댓글