Kotlin에서는 클래스 표기 방법을 두 가지 제공합니다.
::class와 ::class.java입니다. 이 두 표기방법은 각각 Kotlin의 Class, Java의 Class를 표현하는데 사용됩니다.
두 표기법은 어떤 차이가 있는가?
::class | ::class.java |
---|---|
Kotlin의 Class를 표현한다. | Java의 Class를 표현한다. |
KClass를 반환한다. | Class를 반환한다. |
Kotlin의 확장 기능들 (프로퍼티, data클래스 등…)에 대한 Reflection을 사용할 수 있다. | Kotlin의 확장 기능들에 대한 Reflection을 사용할 수 없다. |
왜 클래스 표현 방식을 두 가지로 나누어 제공하는가?
Kotlin은 Java와의 완벽한 호환성을 보장합니다. 그래서 Kotlin에서 Java로 쓰여진 Class들을 사용할 수 있습니다.
Kotlin에서의 클래스는 Java에 비해 확장 기능들이 더 포함되어 있습니다. 예를 들면 프로퍼티, data 클래스 등…
그래서 코틀린 클래스에서 이러한 확장 기능에 대한 조작(Reflection을 말합니다)을 할 수 있게 하기 위해서 KClass(KotlinClass)라는 것을 도입합니다. 기존의 Java Class를 위한 ‘Class’만으로는 Kotlin의 확장 기능들을 다룰 수 없습니다. 그래서 Kotlin에서의 class를 지원하기 위해 추가로 KClass를 도입한 것입니다.
반드시 Kotlin Class에는 ::class만 사용해야하는가?
아닙니다. Kotlin Class이어도 ::class.java를 사용할 수 있습니다. 다만 이 경우에는 Kotlin의 클래스 확장 기능 Reflection을 사용할 수 없습니다. (프로퍼티, data클래스, …)