코틀린의 Annotations(주석) 사용법은?

_____
Q1: 코틀린에서 Annotation(애노테이션)이란 무엇인가요?
A1: Annotation은 코드에 메타데이터를 추가하는 방법입니다. 컴파일러, 도구, 프레임워크 등이 애노테이션 정보를 읽어 특정 처리를 하도록 도와줍니다.

Q2: 코틀린에서 애노테이션을 사용하는 기본 문법은 어떻게 되나요?
A2: 애노테이션은 `@AnnotationName` 형태로 선언 대상 위에 붙입니다. 예를 들어:
```kotlin
@Target(AnnotationTarget.CLASS)
annotation class MyAnnotation(val info: String)

@MyAnnotation("Example")
class MyClass
```

Q3: 코틀린에서 기본 제공하는 애노테이션 예는 무엇이 있나요?
A3: 대표적으로 `@Deprecated`, `@JvmStatic`, `@JvmName`, `@Suppress`, `@Test`(테스트 프레임워크), `@Parcelize`(안드로이드) 등이 있습니다.

Q4: 커스텀 애노테이션은 어떻게 만들고 사용하나요?
A4: `annotation class` 키워드로 선언합니다. 예:
```kotlin
annotation class Fancy(val author: String)

@Fancy(author = "홍길동")
class Book
```

Q5: 애노테이션에 매개변수를 줄 수 있나요?
A5: 네, 생성자처럼 매개변수를 정의할 수 있습니다. 문자열, 숫자, 클래스 타입 등 제한된 타입만 가능합니다.

Q6: 애노테이션 대상 지정은 어떻게 하나요?
A6: `@Target`을 사용해 애노테이션이 적용 가능한 대상을 지정할 수 있습니다. 예:
```kotlin
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
annotation class MyAnnotation
```

Q7: 런타임 시 애노테이션 정보를 얻으려면 어떻게 해야 하나요?
A7: `@Retention`을 `AnnotationRetention.RUNTIME`으로 지정해야 하며, 리플렉션 API를 사용해 조회합니다.
```kotlin
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnno

fun main() {
val annotations = MyClass::class.annotations
}
```

Q8: 표준 라이브러리 애노테이션 중 자바 상호운용성을 위한 애노테이션은 무엇이 있나요?
A8: `@JvmName`, `@JvmStatic`, `@JvmOverloads`, `@JvmField` 등이 있습니다. 자바와의 API 호환성을 위해 씁니다.

Q9: 특정 컴파일러 경고를 숨기려면 어떤 애노테이션을 사용하나요?
A9: `@Suppress("WARNING_NAME")`을 사용합니다. 예:
```kotlin
@Suppress("UNCHECKED_CAST")
fun foo() { ... }
```

Q10: 애노테이션을 클래스, 함수, 프로퍼티, 변수 등 다양한 곳에 붙일 때 주의할 점이 있나요?
A10: 맞는 대상에만 사용해야 하므로 `@Target`으로 제한하는 것이 좋고, 애노테이션 위치를 명확히 지정하려면 use-site target(`@get:`, `@set:`, `@field:` 등) 을 활용할 수 있습니다.

Q11: use-site target이란 무엇인가요?
A11: 프로퍼티에 붙이는 애노테이션을 필드, 게터, 세터 등 특정 요소에 구분해서 붙이는 문법입니다. 예를 들어:
```kotlin
@get:JvmName("getFoo")
val foo: Int = 10
```

Q12: 요약하자면 코틀린 Annotation 사용법은?
A12:
1. `annotation class`로 정의
2. `@AnnotationName`으로 적용
3. `@Target`으로 적용 대상 제어
4. `@Retention`으로 유지 정책 결정
5. 필요 시 use-site target 활용
6. 리플렉션으로 런타임 조회 가능
7. 표준 애노테이션과 JVM 연동 애노테이션 활용

기본만 숙지해도 코틀린 애노테이션을 효과적으로 사용할 수 있습니다.
코틀린(Kotlin)에서 Annotations(주석)는 메타데이터를 코드에 추가하는 방법으로, 주로 코드의 동작이나 특성을 설명하는 데 사용됩니다.

Annotations는 주로 컴파일러, IDE, 런타임 환경에서 특정 동작을 수행하도록 지시하는 데 사용됩니다.

코틀린에서 Annotations를 사용하는 방법에 대해 자세히 알아보겠습니다.

1. Annotations의 기본 구조 코틀린에서 Annotations는 `@` 기호로 시작합니다.

Annotations는 클래스, 함수, 프로퍼티, 매개변수 등 다양한 요소에 적용할 수 있습니다.

기본적인 Annotations의 구조는 다음과 같습니다.

```kotlin @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class MyAnnotation(val description: String) ``` 위의 예제에서 `MyAnnotation`이라는 이름의 Annotation을 정의했습니다.

이 Annotation은 클래스와 함수에 적용될 수 있으며, 런타임 동안 유지됩니다.



2. Annotations의 주요 속성 - @Target : Annotation이 적용될 수 있는 대상을 지정합니다.

예를 들어, `AnnotationTarget.CLASS`, `AnnotationTarget.FUNCTION`, `AnnotationTarget.PROPERTY` 등이 있습니다.

- @Retention : Annotation의 생명 주기를 정의합니다.

`AnnotationRetention.SOURCE`, `AnnotationRetention.BINARY`, `AnnotationRetention.RUNTIME` 중 하나를 선택할 수 있습니다.

- @Repeatable : 동일한 Annotation을 여러 번 적용할 수 있도록 허용합니다.



3. Annotations 사용 예제 Annotations를 정의한 후, 이를 실제 코드에 적용하는 방법을 살펴보겠습니다.

```kotlin @Target(AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class LogExecutionTime class Example { @LogExecutionTime fun performTask() { // 작업 수행 } } ``` 위의 예제에서 `performTask` 함수에 `LogExecutionTime` Annotation을 적용했습니다.

이 Annotation은 함수의 실행 시간을 기록하는 데 사용될 수 있습니다.



4. Annotations 처리 Annotations를 처리하기 위해 리플렉션(reflection)을 사용할 수 있습니다.

리플렉션을 통해 Annotation이 적용된 요소를 검사하고, 필요한 동작을 수행할 수 있습니다.

```kotlin import kotlin.reflect.full.findAnnotation fun main() { val example = Example() val method = example::class.members.find { it.name == "performTask" } method?.let { val annotation = it.findAnnotation() if (annotation != null) { println("LogExecutionTime annotation is present on performTask.") // 실행 시간 기록 로직 추가 } } } ``` 위의 코드에서는 `performTask` 함수에 `LogExecutionTime` Annotation이 적용되어 있는지 확인하고, 해당 Annotation이 존재할 경우 특정 로직을 수행합니다.



5. Annotations의 활용 Annotations는 다양한 용도로 활용될 수 있습니다.

예를 들어: - 의존성 주입 : Dagger와 같은 프레임워크에서 의존성을 주입하기 위해 Annotations를 사용합니다.

- 테스트 : JUnit과 같은 테스트 프레임워크에서 테스트 메서드를 식별하기 위해 Annotations를 사용합니다.

- 직렬화 : JSON 직렬화 라이브러리에서 클래스와 프로퍼티를 직렬화하기 위해 Annotations를 사용합니다.



6. 사용자 정의 Annotations 코틀린에서는 사용자 정의 Annotations를 쉽게 만들 수 있습니다.

위에서 설명한 것처럼 `annotation class`를 사용하여 원하는 속성과 동작을 가진 Annotation을 정의할 수 있습니다.

이를 통해 코드의 가독성을 높이고, 특정 동작을 명확하게 표현할 수 있습니다.

결론 코틀린에서 Annotations는 코드에 메타데이터를 추가하고, 특정 동작을 정의하는 강력한 도구입니다.

Annotations를 적절히 활용하면 코드의 가독성을 높이고, 유지보수를 용이하게 할 수 있습니다.

다양한 프레임워크와 라이브러리에서 Annotations를 사용하므로, 이를 이해하고 활용하는 것은 코틀린 개발자에게 매우 중요한 스킬입니다.

작성자: 정수호 [비회원] | 작성일자: 1년 전 2024-09-09 09:47:15
조회수: 270 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.