[kotlin] 애노테이션의 상속 기능 이해하기

코틀린에서 애노테이션은 소스 코드에 메타데이터를 추가하는 데 사용됩니다. 애노테이션은 기본적으로 상속되지 않지만, 특정 상황에서 애노테이션을 상속받아 확장하는 기능을 제공합니다.

애노테이션의 상속

코틀린에서 애노테이션의 상속은 @Inherited 애노테이션을 사용하여 구현됩니다. 이 애노테이션은 애노테이션이 상속되도록 지정하는 데 사용됩니다. 자식 클래스에서 @Inherited 애노테이션이 붙은 애노테이션을 부모 클래스의 애노테이션과 함께 상속받을 수 있습니다.

@Inherited
annotation class ParentAnnotation

@ParentAnnotation
annotation class ChildAnnotation

위의 코드에서 @Inherited 애노테이션을 사용하여 ParentAnnotation이 상속될 수 있도록 지정하고, ChildAnnotation에서 @ParentAnnotation을 사용하여 ChildAnnotationParentAnnotation을 상속받을 수 있도록 합니다.

상속된 애노테이션 사용하기

상속된 애노테이션은 주로 라이브러리나 프레임워크에서 사용되며, 상속된 애노테이션을 통해 부모 클래스의 메타데이터를 유지하면서 자식 클래스에서도 활용할 수 있습니다.

fun getClassAnnotations(clazz: Class<*>) {
    val annotations = clazz.annotations
    println("Annotations: ${annotations.joinToString()}")
}

@ParentAnnotation
class Parent

class Child : Parent()

fun main() {
    getClassAnnotations(Child::class.java) // Output: Annotations: @ParentAnnotation()
}

위의 예제에서 Child 클래스는 Parent 클래스를 상속하고 있으며, ParentAnnotation 또한 상속되어 Child 클래스에 적용됩니다.

애노테이션의 상속 기능을 이용하면 코드의 반복을 줄이고 일관된 메타데이터를 유지할 수 있습니다.

결론

코틀린에서는 @Inherited 애노테이션을 사용하여 애노테이션의 상속을 지원하며, 이를 통해 부모 클래스의 애노테이션을 자식 클래스에서 활용할 수 있습니다.

애노테이션의 상속 기능은 코드의 유지보수성과 가독성을 높이는 데 도움이 됩니다.


참고 자료: