[kotlin] 코틀린 리플렉션을 이용한 외부 클래스 접근 확인

코틀린은 리플렉션을 활용하여 실행 중에 클래스의 정보를 런타임에 검사하고 조작할 수 있는 기능을 제공합니다. 이를 통해 외부 클래스의 속성과 메서드에 접근할 수 있습니다. 리플렉션을 사용하여 외부 클래스에 접근하는 방법에 대해 알아보겠습니다.

외부 클래스 접근 예제

다음은 간단한 외부 클래스와 이를 이용한 접근 예제입니다.

class OuterClass {
    private var message = "Hello, Reflection!"

    private fun privateFunction() {
        println("This is a private function in OuterClass")
    }
}

위 코드에서 OuterClassmessage라는 private 속성과 privateFunction이라는 private 메서드를 가지고 있습니다. 이제 이러한 외부 클래스의 private 멤버에 접근하는 방법을 살펴보겠습니다.

코틀린 리플렉션을 활용한 외부 클래스 접근

리플렉션을 사용하면 외부 클래스의 private 멤버에도 접근할 수 있습니다.

import kotlin.reflect.full.declaredMemberFunctions
import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.memberVisibility

fun main() {
    val outerClass = OuterClass()

    val messageProperty = OuterClass::class.memberProperties.find { it.name == "message" }
    messageProperty?.let {
        it.isAccessible = true
        val messageValue = it.get(outerClass) as String
        println("Accessing private message in OuterClass: $messageValue")
    }

    val privateFunction = OuterClass::class.declaredMemberFunctions.find { it.name == "privateFunction" }
    privateFunction?.let {
        it.isAccessible = true
        it.call(outerClass)
    }
}

위의 예제 코드에서는 OuterClass의 private 속성과 private 메서드에 접근하기 위해 코틀린 리플렉션을 사용했습니다.

memberPropertiesmemberVisibility를 사용하여 private 속성에 접근하고, declaredMemberFunctionscall을 사용하여 private 메서드에 접근했습니다. 또한, isAccessible를 true로 설정하면 private 멤버에 접근할 수 있습니다.

이제 코틀린에서 리플렉션을 사용하여 외부 클래스의 private 멤버에 접근하는 방법을 알아보았습니다.

참고 자료