[Kotlin] 리플렉션(Reflection)

yuuuzzzinzzzang·2022년 1월 5일
1

🔵 Kotlin 🟠

목록 보기
3/3
post-thumbnail

리플렉션(Reflection)이란?

말 그대로, '반사', '반영'한다는 의미입니다.
바이트코드를 이용해 참조하려는 값을 찾기 위해 리플렉션을 사용합니다.

자바와 코틀린에서의 리플렉션

코틀린을 사용해 안드로이드 개발을 하면서 객체::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

profile
yuuuzzzin의 개발 블로그

0개의 댓글