[kotlin] 코틀린과 자바 리플렉션
리플렉션이란 프로그램 실행 중에 자신의 구조를 조사하거나 수정하는 기능을 의미합니다. 코틀린과 자바는 리플렉션을 지원하여 런타임 시에 클래스, 메서드, 필드 등의 정보를 동적으로 얻거나 조작할 수 있습니다.
코틀린에서의 리플렉션
코틀린에서의 리플렉션은 KClass
, KCallable
, KFunction
, 등의 인터페이스를 통해 지원됩니다. 예를 들어, 다음은 특정 클래스의 속성을 가져오는 방법을 보여줍니다.
import kotlin.reflect.full.memberProperties
class User(val name: String, val age: Int)
fun main() {
val userClass = User::class
val properties = userClass.memberProperties
println("Properties of User class: $properties")
}
자바에서의 리플렉션
자바에서는 java.lang.reflect
패키지를 통해 리플렉션이 지원됩니다. 다음은 특정 클래스의 메서드를 호출하는 간단한 예제입니다.
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
Class<?> myClass = Class.forName("com.example.MyClass");
Method myMethod = myClass.getMethod("myMethod");
myMethod.invoke(myClass.newInstance());
}
}
코틀린과 자바에서의 차이점
코틀린과 자바에서의 리플렉션의 가장 큰 차이점은 널 안전성과 확장 함수의 지원입니다. 코틀린의 확장 함수는 기존 클래스에 새로운 함수를 추가할 수 있는 기능을 제공합니다.
결론
리플렉션은 강력하지만 주의해서 사용해야 합니다. 올바르게 사용하기 위해서는 문서를 자세히 읽고, 안전한 코드를 작성하는 것이 중요합니다.
참고 자료