Home [Kotlin] ::class vs ::class.java
Post
Cancel

[Kotlin] ::class vs ::class.java

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클래스, …)

This post is licensed under CC BY 4.0 by the author.

[Android] Chronometer

[Android] Activity Lifecycle