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

코틀린에서 내부 클래스의 접근 제한을 확인하는 방법에 대해 이야기해보겠습니다. 내부 클래스는 외부 클래스의 private 멤버에 접근할 수 있지만, Java의 경우처럼 내부 클래스를 외부에서 직접 접근하는 것은 불가능합니다. 하지만 리플렉션을 사용하면 가능합니다.

내부 클래스의 접근 제한 확인하기

코틀린에서 내부 클래스인 InnerClass의 private 멤버 privateField에 접근해보겠습니다.

class OuterClass {
    private val privateField: String = "private field value"

    inner class InnerClass {
        fun accessPrivateField(): String {
            return privateField
        }
    }
}

위 코드는 OuterClassprivateField라는 private 멤버를 갖고 있는 내부 클래스 InnerClass가 정의되어 있습니다.

리플렉션을 사용하여 내부 클래스 접근

이제 리플렉션을 사용하여 위에서 정의한 OuterClassInnerClass에서 private 멤버에 접근해보겠습니다.

fun main() {
    val outer = OuterClass()
    val inner = outer.InnerClass()

    val privateField = outer.javaClass.getDeclaredField("privateField")
    privateField.isAccessible = true

    val fieldValue = privateField.get(outer)

    println(fieldValue) // 출력: private field value
}

위의 코드에서 getDeclaredField() 메서드를 사용하여 privateField를 가져온 뒤 isAccessible를 true로 설정하여 private 멤버에 접근합니다. 이후 get() 메서드를 사용하여 해당 private 멤버의 값을 가져옵니다.

정리

코틀린에서도 리플렉션을 통해 내부 클래스의 private 멤버에 접근할 수 있습니다. 하지만 리플렉션을 남용하면 코드의 가독성과 안전성이 저하될 수 있으므로 필요한 경우에만 신중하게 사용하는 것이 좋습니다.

내부 클래스와 리플렉션에 대한 자세한 내용은 Kotlin 공식 문서를 참고하시기 바랍니다.

코틀린 공식문서