[kotlin] 코틀린 리플렉션을 이용한 내부 클래스 접근 제한 확인
코틀린에서 내부 클래스의 접근 제한을 확인하는 방법에 대해 이야기해보겠습니다. 내부 클래스는 외부 클래스의 private 멤버에 접근할 수 있지만, Java의 경우처럼 내부 클래스를 외부에서 직접 접근하는 것은 불가능합니다. 하지만 리플렉션을 사용하면 가능합니다.
내부 클래스의 접근 제한 확인하기
코틀린에서 내부 클래스인 InnerClass
의 private 멤버 privateField
에 접근해보겠습니다.
class OuterClass {
private val privateField: String = "private field value"
inner class InnerClass {
fun accessPrivateField(): String {
return privateField
}
}
}
위 코드는 OuterClass
에 privateField
라는 private 멤버를 갖고 있는 내부 클래스 InnerClass
가 정의되어 있습니다.
리플렉션을 사용하여 내부 클래스 접근
이제 리플렉션을 사용하여 위에서 정의한 OuterClass
의 InnerClass
에서 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 공식 문서를 참고하시기 바랍니다.