코틀린 언어 정리 6-10
Annotations
표준 애노테이션들
다음은 컴파일러의 출력 결과물에 영향을 줄 수 있는 표준 라이브러리에 포함된 애노테이션들 중 일부입니다.
@JvmName
제네릭으로 함수를 구현하다 보면 코틀린 코드를 Java코드로 변환 시 함수 이름이 동일해져서 에러가 발생할 수 있는데 이런 경우 제네릭으로 구현된 함수의 이름을 @JvmName으로 수동으로 지정해 주면 이름 충돌 문제를 해결할 수 있습니다.
@JvmStatic
코틀린에서는 static을 지원하지 않고 companion object를 통해 이를 흉내 냅니다. 실제로 Kotlin 코드가 Java로 변환될 때에도 static으로 변환되지 않고 클래스의 INSTANCE라는 정적 필드의 멤버로 추가됩니다.(ClassA 라는 클래스에 companion object가 있고, 이 내부에 kotlinField라는 멤버가 있다고 가정했을 때, Java로 변환된 코드에서는 ClassA.INSTANCE.kotlinField 와 같은 방법으로 접근합니다.) 하지만 @JvmStatic 사용 시 이와 같은 간접적인 방법으로 처리하지 않고 클래스의 static 멤버로 직접 변환합니다. 즉 자바 클래스의 INSTANCE 멤버를 통하지 않고 클래스를 통해 바로 접근할 수 있게 해줍니다.(ex. ClassA.kotlinField)
@JvmOverloads
기본값이 지정된 매개변수를 가지는 코틀린 함수를 Java함수로 변환할 때, 동일한 선언으로 변환하지 않고 매개변수 개수로 구분되는 여러개의 오버로드된 함수로 각각 구현하게 해줍니다.(기본 값이 지정된 매개변수들을 함수 매개변수에서 하나씩 제외하고 이 기본 값들을 함수 구현 내부에 고정시키면서(상수처럼 사용) 각각의 오버로드된 구현을 생성합니다.)
@Throws
코틀린에서는 함수에서 예외를 throw 하는 경우, Java처럼 이를 함수 선언에 별도로 명시해 주는 방법이 없습니다. 마찬가지로 Java로 변환된 함수 선언에도 throws가 포함되지 않습니다. 하지만 코틀린 함수에 @Throws를 사용하면 변환된 Java 함수 선언에 throws 구문이 추가됩니다. 즉 코틀린에서 구현한 함수를 Java에서 사용하려고 할 때, 코틀린 함수에 @Throws를 적용하면 Java에서 이 함수를 호출할 때 반드시 예외처리를 하도록 제한하므로 함수를 좀 더 안정적으로 사용할 수 있게 유도할 수 있습니다.
예제
'코틀린( Kotlin )' 카테고리의 다른 글
코틀린 7-2 Variance - 불변 공변 반공변에 대한 일반적인 개념 (0) | 2020.04.24 |
---|---|
코틀린 7-1 Generics (0) | 2020.04.23 |
코틀린 6-9 Annotations - Annotation instance 접근 (0) | 2020.04.21 |
코틀린 6-8 Annotations - Java Annotations (0) | 2020.04.20 |
코틀린 6-7 Annotations - Use-site Targets (0) | 2020.04.19 |