Kotlin Annotations (Use-Site Targets)

About

Java로 Spring Framework를 사용해봤다면 알겠지만 어노테이션(@XXXX)이 정말 많다. @Bean, @Component, @Service, @Repository, @Configuration 뿐 아니라 JPA와 Validation 등까지 추가하면 @Entity, @Email, @NotEmpty 등 다양하다. 사용 방식은 보통 클래스, 필드 등의 위에 적어주면 된다. 예를 들어 다음과 같은 DTO가 있다고 가정하자.

@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class UserRegisterRequest {

    @Email(message = "{user.register.email.invalid_format}")
    private String email;
    
    @Min(value = 18, message = "{user.register.age.too_young}")
    @Max(value = 25, message = "{user.register.age.too_old}")
    private int age;
    
    @Size(min = 16, max = 32, message = "{user.register.password.size.too_short}")
    private String password;
}

코틀린과 Spring을 사용할 때, 특히 validation 적용할 때 주의할 점은 필드 위에는 바로 어노테이션을 붙이는 것이 아니라 다음과 같이 타겟을 정해줘야 한다.

data class UserRegisterRequest(
    @field:Email(message = "{user.register.email.invalid_format}")
    val email: String
    
    @field:[
        @Min(value = 18, message = "{user.register.age.too_young}")
        @Max(value = 25, message = "{user.register.age.too_old}")
    ]
    val age: Int
    
    @field:Size(min = 16, max = 32, message = "{user.register.password.size.too_short}")
    val password: String
)
  • 적용하려는 범위에 따라 @field, @set, @param, @property 등이 있다.

  • 적용하려는 어노테이션이 여러 개 (e.g., @A, @B)라면 @field[A B]와 같이 구분자(,) 없이 []로 감싸주면 된다.

REF

Last updated