[kotlin] 코틀린 리플렉션을 이용한 내부 클래스 생성
코틀린은 자바와 호환되는 객체지향 프로그래밍 언어로, 리플렉션(Reflection)을 지원하여 실행 중에 클래스나 인터페이스의 정보를 알아내고 사용할 수 있습니다. 리플렉션이 필요한 경우 중 하나는 내부 클래스를 동적으로 생성하는 경우인데, 이를 위해 코틀린에서는 KClass
와 createInstance()
메서드를 사용합니다.
이번 포스트에서는 코틀린 리플렉션을 이용해 내부 클래스를 생성하는 방법에 대해 알아보겠습니다.
1. 내부 클래스 생성
먼저, 내부 클래스를 생성하고 필수 생성자를 포함하는 외부 클래스를 정의합니다.
class OuterClass(private val name: String) {
inner class InnerClass {
fun displayMessage() {
println("Hello, $name")
}
}
}
위 예제에서 OuterClass
는 내부 클래스 InnerClass
를 가지고 있으며, InnerClass
에는 displayMessage()
메서드가 있습니다.
2. 리플렉션을 통한 내부 클래스 생성
이제, 리플렉션을 사용하여 OuterClass
의 인스턴스를 생성하고 해당 인스턴스를 통해 내부 클래스의 인스턴스를 생성해봅시다.
import kotlin.reflect.KClass
import kotlin.reflect.full.createInstance
fun main() {
val outerClass = OuterClass("John")
val innerClassType: KClass<OuterClass.InnerClass> = outerClass.InnerClass::class
val innerClassInstance = innerClassType.createInstance()
innerClassInstance.displayMessage() // 출력: Hello, John
}
위 코드에서 outerClass.InnerClass::class
를 통해 내부 클래스 InnerClass
의 KClass
를 얻고, createInstance()
메서드로 내부 클래스의 인스턴스를 생성합니다.
이렇게 생성된 내부 클래스의 인스턴스를 통해 내부 클래스의 메서드를 호출할 수 있습니다.
결론
코틀린 리플렉션을 사용하여 내부 클래스를 동적으로 생성하는 방법에 대해 살펴보았습니다. 내부 클래스의 생성은 리플렉션을 활용하여 다양한 동적 프로그래밍 상황에 유용하게 활용될 수 있습니다.
더 많은 정보는 코틀린 공식 문서를 참고하세요.