아래의 글은 드미트리 제메로프, 스베트라나 이사코바 저/오현석역,『Kotlin in Action』,에이콘출판사(2017)의 내용을 기반으로 작성하였습니다. 

 

코틀린에서 어노케이션 인자 지정 문법

- @Annotation(TheClass::class)

- 어노테이션 인자로 어노테이션 넣는 경우는 @ 생략

- 배열 = arrayOf함수 사용

- 프로퍼티를 어노테이션 인자로 사용할 경우 const 붙여서 사용

 

어노테이션 대상

방법 : @get:Rule : 사용대상:어노테이션 이름

대상 : property, field, get, set, receiver, param, setparam, delegate, file

 

어노테이션 인자로 식 허용

 

어노테이션 선언 : annotation class JsonExclude

 

annotation class JsonName(val name: String)

// java

public @interface JsonName {
	String value();
}

 

어노테이션 제어 : 메타어노테이션

어노테이션 클래스에 적용할 어노테이션

 

@Retention(AnnotationRetention.RUNTIME) : default 값

 

inteface Company {
	val name: String
}

data class CompanyImpl(override val name: String): Company

data class Person(
  val name: String, 
  @DeserializedIntefface(CompanyImpl::class) val company: Company
)

annotaion class DeserializedInterface(val targetClass: KClass<out Any>)


annotation class CustomerSerializer {
	val serializerClass: KClass<out ValueSerializer<*>>
}


 

어노테이션 파라메터로 제네릭 클래스 받기

 

example from : github.com/yole/jkid/blob/master/src/test/kotlin/examples/_6DateSerializerExample.kt

package ru.yole.jkid.examples.customSerializerTest

import org.junit.Test
import ru.yole.jkid.CustomSerializer
import ru.yole.jkid.ValueSerializer
import ru.yole.jkid.examples.jsonSerializerTest.testJsonSerializer
import java.text.SimpleDateFormat
import java.util.*

object DateSerializer : ValueSerializer<Date> {
    private val dateFormat = SimpleDateFormat("dd-mm-yyyy")

    override fun toJsonValue(value: Date): Any? =
            dateFormat.format(value)

    override fun fromJsonValue(jsonValue: Any?): Date =
            dateFormat.parse(jsonValue as String)
}

data class Person(
        val name: String,
        @CustomSerializer(DateSerializer::class) val birthDate: Date
)

class DateSerializerTest {
    @Test fun test() = testJsonSerializer(
            value = Person("Alice", SimpleDateFormat("dd-mm-yyyy").parse("13-02-1987")),
            json = """{"birthDate": "13-02-1987", "name": "Alice"}"""
    )
}

 

책 사이트

www.manning.com/books/kotlin-in-action

kotlin-in-action 전체 예제 코드

www.manning.com/downloads/1271

 

 

json 변환 kotlin 기반 라이브러리

github.com/yole/jkid

'독서관련 > Kotlin in Action' 카테고리의 다른 글

CH11 Domain Specific Language  (0) 2021.03.02
CH10 리플렉션  (0) 2021.02.13
CH09 코틀린 제네릭스  (0) 2021.01.29
CH08 코틀린 고차함수  (0) 2021.01.28
CH07 코틀린 연산자 오버로딩  (0) 2021.01.27

+ Recent posts