[kotlin] 코틀린 리플렉션을 이용한 필드 값 변경

코틀린에서는 리플렉션을 사용하여 런타임에 클래스의 속성 및 메서드에 접근할 수 있습니다. 이를 통해 필드의 값을 동적으로 변경할 수 있습니다. 본 블로그에서는 코틀린의 리플렉션을 이용하여 필드 값 변경하는 방법에 대해 알아보겠습니다.

1. 필드 값 변경을 위한 클래스 및 필드 정의

먼저, 필드 값을 변경할 대상 클래스의 예제를 정의합니다.

class SampleClass {
    var name: String = "Initial Name"
    var age: Int = 30
}

위의 예제에서 SampleClassnameage 두 개의 필드를 가지고 있습니다.

2. 리플렉션을 이용한 필드 값 변경

이제, 리플렉션을 사용하여 SampleClass의 필드 값을 변경하는 방법을 살펴봅시다.

import kotlin.reflect.full.memberProperties

fun main() {
    val sample = SampleClass()

    val property = sample::class.memberProperties.find { it.name == "name" }
    if (property != null && property.returnType == String::class) {
        property.isAccessible = true
        property.setter.call(sample, "New Name")
    }

    println("New Name: ${sample.name}") // 출력 결과: New Name
}

위의 코드에서 memberProperties 함수를 사용하여 클래스의 모든 속성에 접근할 수 있습니다. find 함수를 사용하여 필드의 이름으로 특정 필드에 접근하고, 해당 필드의 값을 변경할 수 있습니다.

3. 주의사항

리플렉션은 성능 저하와 보안 이슈 등의 문제로 일반적인 상황에서 권장되지 않습니다. 가능하다면 리플렉션 없이 구현하는 것이 좋습니다.

4. 결론

코틀린의 리플렉션을 이용하면 런타임에 필드 값을 동적으로 변경할 수 있습니다. 그러나 반드시 필요한 경우가 아니라면 리플렉션 대신 다른 방법을 고려하는 것이 좋습니다.

참고 자료: Kotlin Reflection