[kotlin] 코틀린 리플렉션의 개념
코틀린은 자바와 같이 객체의 정보를 동적으로 조사하고 조작할 수 있는 리플렉션(Reflection)을 지원합니다. 리플렉션이란 프로그램이 자기 자신을 조사하거나 수정할 수 있는 능력을 말합니다. 이 기능을 사용하면 실행 중인 코드에 대한 정보를 얻거나 수정할 수 있어, 동적으로 객체를 생성하고 클래스의 멤버에 접근할 수 있습니다.
코틀린 리플렉션을 사용하는 이유
코틀린 리플렉션은 다음과 같은 상황에서 유용합니다.
- 런타임 시점에 객체의 타입을 확인: 프로그램이 동작 중일 때 객체의 정보를 분석하고 해당 객체에 대한 작업을 수행할 수 있습니다.
- 동적으로 클래스 로딩 및 객체 생성: 미리 알지 못한 클래스를 로딩하고 객체를 생성할 수 있습니다.
- 클래스 구조 분석: 클래스의 멤버 변수, 메서드, 어노테이션 등을 분석할 수 있고, 필요에 따라 수정할 수 있습니다.
예제
코틀린에서 리플렉션을 사용하는 간단한 예제를 살펴보겠습니다. 아래는 클래스의 이름과 메소드 이름을 동적으로 가져오는 예제 코드입니다.
import kotlin.reflect.full.*
class Person(val name: String, val age: Int) {
fun sayHello() {
println("Hello, my name is $name")
}
}
fun main() {
// 객체 생성
val person = Person("Alice", 25)
// 동적으로 클래스 이름과 메소드 이름 가져오기
val kClass = person.javaClass.kotlin
println("Class name: ${kClass.simpleName}")
kClass.members.forEach {
println("Member name: ${it.name}")
}
}
위 예제에서는 kotlin.reflect.full.*
라이브러리의 KClass
타입을 사용하여 객체의 클래스 정보를 가져오고, members
프로퍼티를 사용하여 클래스의 멤버들을 동적으로 조사합니다.
결론
코틀린의 리플렉션을 활용하면 객체의 정보를 동적으로 조사하고 조작할 수 있어 매우 강력한 기능을 제공합니다. 그러나 과도한 리플렉션 사용은 성능에 영향을 미치고 코드의 가독성을 떨어뜨릴 수 있으므로 신중하게 활용해야 합니다.
참고 자료: 코틀린 공식 문서 - 리플렉션