[kotlin] 애노테이션을 활용한 런타임 동작 제어

코드를 작성할 때 프로그램의 동작을 제어하고 속성을 부여하는 방법으로 애노테이션(Annotation)을 사용할 수 있습니다. 애노테이션은 소프트웨어에 메타데이터(추가 정보)를 추가하거나 컴파일러에게 특정 작업을 수행하도록 지시할 수 있게 해줍니다. 이번 블로그에서는 Kotlin 언어에서 애노테이션을 활용하여 런타임 동작을 제어하는 방법을 알아보겠습니다.

런타임 동작 제어

애노테이션을 통해 런타임 동작을 제어하기 위해서는 리플렉션(Reflection) 이라는 메커니즘을 사용해야 합니다. 리플렉션을 사용하면 실행 중인 프로그램 내부의 정보를 검사하거나 수정할 수 있습니다.

@Target(AnnotationTarget.FUNCTION)
annotation class ExecuteAtRuntime

class MyClass {
    @ExecuteAtRuntime
    fun myFunction() {
        // 함수의 실행을 제어하는 런타임 동작
    }
}

위의 코드는 ExecuteAtRuntime 애노테이션을 선언하고, MyClass 내부에 있는 myFunction 함수에 해당 애노테이션을 적용한 예시입니다.

애노테이션을 활용한 런타임 동작 제어

런타임에 특정 애노테이션이 적용된 요소를 찾아내고 그에 따라 제어하는 방법은 다음과 같습니다.

fun main() {
    val myClass = MyClass()
    val functions = myClass::class.members.filterIsInstance<KFunction<*>>()
    
    functions.forEach { function ->
        if (function.annotations.any { it is ExecuteAtRuntime }) {
            // 런타임에 ExecuteAtRuntime 애노테이션이 적용된 함수를 실행
            function.call(myClass)
        }
    }
}

위의 예시에서는 myClass의 모든 멤버 중에서 함수만 걸러내어 ExecuteAtRuntime 애노테이션이 적용된 함수를 찾아내고, 해당 함수를 실행하는 방법을 보여줍니다.

애노테이션을 활용한 런타임 동작 제어는 프로그램의 유연성을 높이고 반복적인 작업을 간소화하는 데 도움이 됩니다. Kotlin에서는 애노테이션과 리플렉션을 조합하여 런타임 동작을 제어하는 기능을 제공하므로, 애노테이션을 적절히 활용하여 프로그램을 보다 유연하고 효율적으로 만들 수 있습니다.

이상으로 Kotlin에서 애노테이션을 활용한 런타임 동작 제어에 대해 알아보았습니다.

참고 자료: