[kotlin] 코틀린 리플렉션을 이용한 내부 클래스 생성

코틀린은 자바와 호환되는 객체지향 프로그래밍 언어로, 리플렉션(Reflection)을 지원하여 실행 중에 클래스나 인터페이스의 정보를 알아내고 사용할 수 있습니다. 리플렉션이 필요한 경우 중 하나는 내부 클래스를 동적으로 생성하는 경우인데, 이를 위해 코틀린에서는 KClasscreateInstance() 메서드를 사용합니다.

이번 포스트에서는 코틀린 리플렉션을 이용해 내부 클래스를 생성하는 방법에 대해 알아보겠습니다.

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를 통해 내부 클래스 InnerClassKClass를 얻고, createInstance() 메서드로 내부 클래스의 인스턴스를 생성합니다.

이렇게 생성된 내부 클래스의 인스턴스를 통해 내부 클래스의 메서드를 호출할 수 있습니다.

결론

코틀린 리플렉션을 사용하여 내부 클래스를 동적으로 생성하는 방법에 대해 살펴보았습니다. 내부 클래스의 생성은 리플렉션을 활용하여 다양한 동적 프로그래밍 상황에 유용하게 활용될 수 있습니다.

더 많은 정보는 코틀린 공식 문서를 참고하세요.