리플렉션(reflection) 이란
코틀린에서의 리플렉션
코틀린에서 액티비티를 넘길 때 .java를 붙여 코드를 작성하는 것을 볼 수 있습니다. 그 이유는 자바에서 쓰는 클래스와 코틀린에서 쓰는 클래스가 다르기 때문입니다.
자바에서는 Class를 리턴하는 반면, 코틀린에서는 클래스명::class를 하게 되면 KClass를 리턴합니다. 그렇기 때문에 KClass를 Class로 바꿔줘야 하는데 이때 .java를 붙여 자바 클래스 값을 받습니다.
코틀린에서는 자바 리플렉션 뿐만 아니라 이를 코틀린 레벨로 추상화한 코틀린 리플렉션을 별도로 제공해주고 있습니다.
런타임 때 동적으로 클래스를 분석하려면 클래스에 대한 정보가 필요한데 이 클래스에 대한 정보를 클래스 레퍼런스라고 표현합니다.
클래스 타입은 KClass<*>로 표현하며 대입하는 클래스 레퍼런스는 "클래스명::class"로 표현합니다.
val myVal:KClass<String> = String::class
val myVal2:Class<*> = String::class.java