API 개발 시 @Valid와 BindingResult를 통해 유효성 검사를 하게 되는 경우가 많다.
그런데 유효성 검사가 필요한데, 필요한 어노테이션은 없고, 그 와중에 비슷하게 처리할만한 곳이 여러 곳인 경우가 있다.
한,두군데라면 그냥 if문 써도 무방하지만 그 개수가 많은 경우에는 직접 커스텀 어노테이션을 만드는 것이 좋다.
어노테이션 만들기
아래 예제는 예전에 Fcm을 사용하는 케이스를 위해 만든 구글에서 이것저것 찾아보면서 만든 첫번째 어노테이션이다.
자세히 들어가면 내용이 많아지니 간단하게만 알아보자.
@Documented
javadoc으로 API 문서를 만들 때 어노테이션에 대한 설명도 포함하도록 지정한다.
@Constraint
유효성 검사를 위한 어노테이션일 경우 유효성을 검증하기 위한 클래스를 지정한다.
@Target
해당 어노테이션이 동작할 수 있는 범위를 지정한다. (enum)
클래스, 생성자, 지역 변수 등 종류가 다양하다.
자세한 것은 java.lang.annotation.ElementType에서 확인해볼 수 있다.
@Retention
어노테이션의 유지 정책을 지정한다.
종류
SOURCE
이름 그대로 소스까지만 유지
컴파일 시 사라진다.
CLASS
컴파일까지만 유지된다.
컴파일 후 생성되는 .class 파일에는 남아있다.
다만 Java가 실행되는 동안인 런타임 중에는 사용할 수 없다.
RUNTIME
Java가 VM에서 실행되는 동안에도 유지된다.
@Documented@Constraint(validatedBy={CheckFcmTypeValidator.class})@Target({METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER,TYPE_USE})@Retention(RUNTIME)public@interfaceCheckFcmType{Stringmessage()default"지원하지 않는 형식의 송신 유형입니다.";Class<?>[]groups()default{};Class<?extendsPayload>[]payload()default{};}