0. 개요
Annotation, 상속 만들어놓은 것을 가져와 사용하는것이다. 무엇을 가져와 어떻게 사용하는지에서 차이가 나는 듯 하다. 정확히 알고 가자.
1. 어노테이션
- 메타데이터(부가기능)을 코드에 비침투적으로 추가할 수단
메타데이터: 데이터에 대한 데이터(강아지가 포유류라는 것, 강아지는 네발로 걷는 다는 것,)
코드에 비침투적으로 추가: 비 침투적이란 기존의 코드 로직에 직접적인 변경이나 개입 ㅇ벗이 추가적인 기능이나 행동을 적용할 수 있다는 것을 의미. AOP(Aspect-Oriented Progreamming)은 이런 반복적인 작업을 관심사라고 부르며, 이 관심사를 핵심 로직에서 분리, 필요한 위치에 비침투적으로 적용
- 자바 또는 코틀린에서 사용됨.
2. 특징
1) 정의
annotation class MyAnnotation
2) 매개변수 사용
annotation class MyAnnotation(val value: String)
3) 주석 사용
@MyAnnotation("test")
class MyClass{}
4) 유용한 내장 주석
- @JvmStatic: JVM에 정적 메서드로 표시되도록 만듭니다.
- @JvmOverloads: 오버로드 생성자를 자동으로 생성
- @JvmField: 프로퍼티를 JVM 필드로 표시
- @Deprecated: APi가 더 이상권장되지 않음을 나타냄
5) 주석 대상(Use-site target)
- 코틀린에서는 주석이 적용이 될 대상을 명시적으로 지정할 수 있습니다.
- 프로퍼티 필드나 getter, setter등에 다르게 주석을 적용할 때 사용됨
3. 사용사례
- 컴파일러 지시: 컴파일러에게 특정 코드를 어떻게 처리해야 하는지 지시
- 리플렉션: 런타임에 클래스, 함수, 프로퍼티에 대한 정보를 조회
- 프레임워크와 라이브러리: 특정 프레임워크나 라이브러리에서 코드의 동작 방식을 수정하거나 확장하는데 사용, Spring Framework, Android Jetpack, Jackson등에서 사용
4. 단점
- 주석은 런타임 비용이 발생할 수 있다.
- 주석을 너무 많이 사용하면 코드가 복잡해짐
5. 상속, 어노테이션 차이
1) 어노테이션
- 컴파일 시나 런타임에 특정 작업을 위한 '정보를 제공'하는데 사용
- 직접적인 동작 로직을 추가하지 않는다.
2) 상속
3) 차이
- 어노테이션은 개에게 이름표를 붙여서 구분하는 것이고 상속은 이름표를 가져와 이름을 적거나 이름을 지우거나 변경할 수 있는 것
Reference
https://sabarada.tistory.com/189