[kotlin] 애노테이션을 활용한 허용 메서드 검증

애노테이션은 코드에 부가적인 정보를 제공하며, 코드의 구성과 실행 방식을 제어할 수 있는 강력한 도구입니다. 코틀린에서 애노테이션을 활용하여 메서드에 대한 검증을 수행하는 방법을 알아보겠습니다.

애노테이션 생성하기

먼저, 허용할 메서드에 대해 특정 애노테이션을 정의합니다. 아래는 AllowedMethod 애노테이션을 정의하는 예시입니다.

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class AllowedMethod(val value: String)

위의 코드에서 @Target(AnnotationTarget.FUNCTION)은 해당 애노테이션이 메서드에 적용될 수 있음을 나타내며, @Retention(AnnotationRetention.RUNTIME)은 런타임 시에도 애노테이션 정보가 유지됨을 의미합니다.

애노테이션 사용하기

이제 애노테이션을 특정 메서드에 적용하여 검증 과정을 수행해보겠습니다.

class UserService {
    @AllowedMethod("admin")
    fun deleteUser(userId: String) {
        // 삭제 로직 수행
    }
}

위 코드에서 deleteUser 메서드에 @AllowedMethod("admin") 애노테이션을 적용하여, 해당 메서드가 “admin” 권한을 가진 사용자에 의해서만 호출될 수 있도록 설정했습니다.

애노테이션 검증하기

마지막으로, 애노테이션을 확인하여 메서드 호출을 허용할 지 여부를 결정하는 코드를 작성합니다.

fun main() {
    val userService = UserService()
    val allowedRoles = getUserRoles() // 사용자의 권한 정보 조회

    val method = UserService::class.java.getDeclaredMethod("deleteUser", String::class.java)
    val allowedRole = method.getAnnotation(AllowedMethod::class.java)?.value
    
    if (allowedRole != null && allowedRoles.contains(allowedRole)) {
        userService.deleteUser("12345") // 사용자의 역할이 허용 목록에 있을 경우에만 메서드 호출
    } else {
        println("해당 메서드를 호출할 수 있는 권한이 없습니다.")
    }
}

위의 코드에서, getAnnotation 함수를 사용하여 메서드에 적용된 애노테이션을 확인하고, 허용된 권한 목록에 있는 경우에만 메서드를 호출하도록 구현했습니다.

애노테이션을 활용한 메서드 검증은 코드의 가독성을 향상시키고, 실행 시 동적인 검증을 수행할 수 있다는 장점을 가지고 있습니다.

코틀린 공식 문서 - 애노테이션