[kotlin] 코틀린 리플렉션을 이용한 리플렉션 클래스 생성
코틀린에서 리플렉션(Reflection)은 런타임 시점에서 프로그램의 구조를 탐색하고 조작하는 데 사용됩니다. 리플렉션을 통해 클래스의 구조, 필드, 메서드 등을 동적으로 알아낼 수 있습니다.
이번에는 코틀린에서 리플렉션을 사용하여 클래스를 동적으로 생성하는 방법에 대해 살펴보겠습니다.
리플렉션 클래스 생성하기
import kotlin.reflect.KClass
import kotlin.reflect.full.createInstance
import kotlin.reflect.full.declaredMemberFunctions
import kotlin.reflect.full.declaredMemberProperties
import kotlin.reflect.full.memberProperties
class ReflectionExample(val name: String, val age: Int) {
fun greet() {
println("Hello, my name is $name and I am $age years old.")
}
}
fun main() {
val kClass: KClass<ReflectionExample> = ReflectionExample::class
val instance: ReflectionExample = kClass.createInstance()
val properties = kClass.declaredMemberProperties
for (prop in properties) {
println("${prop.name} = ${prop.get(instance)}")
}
val functions = kClass.declaredMemberFunctions
for (func in functions) {
println("Function: ${func.name}")
}
}
위의 코드는 ReflectionExample
이라는 클래스를 동적으로 생성하고 해당 클래스의 속성과 메서드를 탐색하여 출력하는 예제입니다.
ReflectionExample
클래스의 구조를 알아내기 위해 KClass
인터페이스를 사용했습니다. createInstance
메서드를 사용하여 클래스의 새 인스턴스를 만들고, declaredMemberProperties
와 declaredMemberFunctions
를 사용하여 각각 클래스의 속성과 메서드를 얻어냈습니다.
이렇게 리플렉션을 사용하면 프로그램이 실행되는 동안에도 클래스를 동적으로 조작하고 탐색할 수 있습니다. 하지만 리플렉션은 실행 시 성능에 영향을 줄 수 있으므로 신중하게 사용해야 합니다.
마치며
이번 포스팅에서는 코틀린에서 리플렉션을 사용하여 클래스를 동적으로 생성하는 방법에 대해 알아보았습니다. 리플렉션은 강력한 도구지만 주의해서 사용해야 하며, 필요한 경우에 한해 적절히 활용해야 합니다.
더 많은 정보는 코틀린 공식 문서에서 확인할 수 있습니다.