말 그대로, '반사', '반영'한다는 의미입니다.
바이트코드를 이용해 참조하려는 값을 찾기 위해 리플렉션을 사용합니다.
코틀린을 사용해 안드로이드 개발을 하면서 객체::class.java를 통해 해당 객체에 접근하는 경우를 많이 봐왔었습니다.
자바로 개발하는 경우에는 SomeActivity.class 형태로 객체에 접근했지만 코틀린에서는 SomeActivity::class.java 형태로 접근을 하여 서로 형태가 다른 것은 알고 있었지만 그 이유는 모르고 있었습니다...!
자바에서 SomeClass.class는 class를 리턴하는 반면, 코틀린에서의 SomeClass::class는 KClass를 리턴합니다.
때문에 KClass -> Class 변환이 필요한데 이 때 .java
를 이용해 자바 클래스 값을 얻습니다.
KClass 안의 java의 getter는 위 코드 사진과 같이 확장함수 형태로 되어있습니다. KClass에서의 자바 클래스 타입을 반환합니다.
::class
를 통해 클래스 참조도 가능하지만 ::Method
, ::Function
를 통해 클래스 내의 메서드나 함수도 참조할 수 있습니다.
참고
https://medium.com/harrythegreat/%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9D%98-%EB%8D%94%EB%B8%94%EC%BD%9C%EB%A1%A0-%EC%B0%B8%EC%A1%B0-73ff25484586
https://khan.github.io/kotlin-for-python-developers/#member-references-and-reflection