Kotlin/포스팅

코틀린 애너테이션

짜집퍼박사(짜박) 2024. 1. 2. 22:17

코틀린에서 애너테이션(Annotation)은 소스 코드에 메타데이터를 추가하는 방법입니다. 애너테이션은 주로 컴파일러, 런타임, 또는 다른 도구들에게 추가 정보를 제공하는 데 사용됩니다. 아래는 코틀린 애너테이션에 대한 주요 내용입니다.

 

1. 애너테이션 선언

코틀린에서 애너테이션은 @ 기호를 사용하여 선언됩니다.

annotation class MyAnnotation

 

2. 애너테이션 사용

애너테이션은 클래스, 함수, 프로퍼티 등에 적용될 수 있습니다.

@MyAnnotation
class MyClass {

    @MyAnnotation
    fun myFunction(@MyAnnotation parameter: String): Int {
        return 42
    }

    @MyAnnotation
    val myProperty: String = "Hello"
}

 

3. 애너테이션 파라미터

애너테이션은 파라미터를 가질 수 있습니다.

annotation class MyAnnotationWithParameter(val value: String)

사용

@MyAnnotationWithParameter("CustomValue")
class MyClass

 

4. 빌트인 애너테이션

코틀린은 몇 가지 빌트인 애너테이션을 제공합니다.

 

- @Deprecated: 코드가 더 이상 사용되지 않음을 나타냅니다.
- @Override: 메서드가 부모 클래스의 메서드를 오버라이드함을 나타냅니다.
- @JvmName: 자바에서 생성되는 메서드의 이름을 지정합니다.

 

5. 애너테이션 리플렉션

애너테이션은 리플렉션을 통해 런타임에서 조회할 수 있습니다.

@Retention(AnnotationRetention.RUNTIME)
annotation class MyRuntimeAnnotation

@MyRuntimeAnnotation
class MyClass

리플렉션을 통해 애너테이션을 가져오는 예

val annotation = MyClass::class.java.getAnnotation(MyRuntimeAnnotation::class.java)

 

6. 애너테이션의 리텐션

애너테이션의 리텐션(Annotation Retention)은 애너테이션이 소스 코드, 클래스 파일, 런타임 중 어느 시점에 정보를 유지할지를 결정합니다. 세 가지 리텐션 종류가 있습니다.

 

- AnnotationRetention.SOURCE: 소스 코드까지만 유지되며 컴파일 후 클래스 파일에는 포함되지 않음.
- AnnotationRetention.BINARY: 컴파일 후 클래스 파일에는 유지되지만 리플렉션을 통해 런타임에는 조회할 수 없음(기본값).
- AnnotationRetention.RUNTIME: 런타임까지 정보를 유지하며 리플렉션을 통해 조회 가능.

@Retention(AnnotationRetention.SOURCE)
annotation class SourceRetentionAnnotation

@Retention(AnnotationRetention.BINARY)
annotation class BinaryRetentionAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class RuntimeRetentionAnnotation

 

7. 애너테이션을 사용한 DSL(Domain Specific Language)

코틀린의 애너테이션을 사용하여 DSL을 만드는 것이 가능합니다. 예를 들어, 안드로이드의 Anko 라이브러리에서 사용되는 DSL은 애너테이션을 통해 정의되어 있습니다.

@DslMarker
annotation class AnkoDslMarker

@AnkoDslMarker
interface AnkoDslMarkerInterface

애너테이션을 사용하여 DSL 마커를 정의하고, 해당 마커를 사용하여 DSL을 생성하는 것이 가능합니다.

class AnkoDslExample : AnkoDslMarkerInterface {

    fun createDsl() {
        verticalLayout {
            button("Click me")
        }
    }
}

이렇게 애너테이션을 사용하면 DSL을 더 쉽게 정의하고 사용할 수 있습니다.

코틀린의 애너테이션은 다양한 용도로 활용되며, 라이브러리, 프레임워크, 코드 생성 등의 다양한 분야에서 활발하게 사용되고 있습니다.

 

With ChatGPT