Kotlin - Reflection (4) - Create Custom Annotation

WindSekirun (wind.seo)·2022년 4월 26일
0

이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.

작성 시점: 2017-10-20

이제 마지막으로 Reflection을 이용한 간단한 어노테이션을 만들어보려고 한다.

예제

먼저 데이터 클래스를 하나 만든다.

data class Contact(val id: Int, val name: String, val email: String)

그리고 만들 어노테이션에 대해 생각해보자.

여기서는 음... @Table 라고 적으면 저 데이터 클래스가 자동으로 데이터베이스의 한 테이블로서 들어가는 기능을 만들 것이다.

Kotlin 에서 어노테이션을 만드는 방법은 class 앞에 annotation을 붙여주면 된다.

annotation class Table(val name: String)

내친 김에 하나 더 만들면, 데이터 클래스에 있는 각각의 필드를 테이블의 요소로서 집어넣을 수 있을 것이다.

annotation class Field(val name: String)

그런데 이렇게 하면 문제가 있다.

@Table("ContactTable")
@Field("Contact")
data class Contact(val id: Int, @Field("name") val name: String, @Field("email") val email: String)

이런 식으로, 분명히 Contact는 클래스인데 Field 를 선언할 수 있게 하면 분명히 버그가 날 것이다.

그래서 annotation class 에 추가적으로 달 수 있는 어노테이션이 있다.

타겟 제한

쓰는 방법은 아래와 같다.

@Target(AnnotationTarget.CLASS)
annotation class Table(val name: String)

여러개의 제한을 두고 싶다면 ,(쉼표)로 이으면 된다.

Reflection가 수행 가능한 단계

Kotlin 에서는 기본적으로 런타임 상과 코드 상에서 둘 다 가능하지만 @Retention으로 설정할 수 있다.

어노테이션 반복

@Repeatable 로 어노테이션을 반복해서 쓸 수 있다.

문서  필수화

@MustBeDocumented로 문서에 반드시 정의되게 할 수 있다.

profile
Android Developer @kakaobank

0개의 댓글