커스텀 어노테이션
- API 개발 시 @Valid와 BindingResult를 통해 유효성 검사를 하게 되는 경우가 많다.
- 그런데 유효성 검사가 필요한데, 필요한 어노테이션은 없고, 그 와중에 비슷하게 처리할만한 곳이 여러 곳인 경우가 있다.
- 한,두군데라면 그냥 if문 써도 무방하지만 그 개수가 많은 경우에는 직접 커스텀 어노테이션을 만드는 것이 좋다.
어노테이션 만들기
- 아래 예제는 예전에 Fcm을 사용하는 케이스를 위해 만든 구글에서 이것저것 찾아보면서 만든 첫번째 어노테이션이다.
- 자세히 들어가면 내용이 많아지니 간단하게만 알아보자.
- @Documented
- javadoc으로 API 문서를 만들 때 어노테이션에 대한 설명도 포함하도록 지정한다.
- @Constraint
- 유효성 검사를 위한 어노테이션일 경우 유효성을 검증하기 위한 클래스를 지정한다.
- @Target
- 해당 어노테이션이 동작할 수 있는 범위를 지정한다. (enum)
- 클래스, 생성자, 지역 변수 등 종류가 다양하다.
- 자세한 것은
java.lang.annotation.ElementType
에서 확인해볼 수 있다.
- @Retention
- 어노테이션의 유지 정책을 지정한다.
- 종류
- SOURCE
- 이름 그대로 소스까지만 유지
- 컴파일 시 사라진다.
- CLASS
- 컴파일까지만 유지된다.
- 컴파일 후 생성되는 .class 파일에는 남아있다.
- 다만 Java가 실행되는 동안인 런타임 중에는 사용할 수 없다.
- RUNTIME
- Java가 VM에서 실행되는 동안에도 유지된다.
Validator
- 유효성을 검증하는 방식을 만드는 클래스다.
- 실제 사용될 어노테이션을 제네릭으로 지정한다.
- 오버라이딩한 isValid 메소드에서의 결과에 따라 유효 여부가 달라진다.