코틀린 언어 정리 6-6
Annotations
Annotation을 적용할 수 있는 대상들
선언한 애노테이션을 적용할 수 있는 대상은 다음과 같습니다.
- class, interface, object, parameter, function, typealias, property, constructor, expression(표현식), function literal(함수 구문)
각 대상별 적용 문법 예시
annotation은
annotation class TA
로 선언 되어 있다고 가정합니다.
적용할 수 있는 대상의 종류는 많지만 모두 위치 기반 지정 방식(애노테이션을 지정할 대상 앞에 선언한 애노테이션 명시)을 사용합니다.
class
@TA class ClassA
interface
@TA interface InterfaceA
object
@TA object ObjectA
parameter
fun funcA ( @TA param1: Int, param2: Long ): String { return "AAA" }
function
@TA fun funcA () {}
typealias
@Target으로 TYPEALIAS를 지정해 주어야 사용 가능합니다.
@Target(AnnotationTarget.TYPEALIAS) annotation class TA
@TA typealias AAA = ClassA
property
전역 및 클래스 프로퍼티, 지역 변수 등에 모두 사용 가능합니다.
@TA var name: String = "TopLevel variable"
constructor
constructor 키워드 앞에 annotation을 추가하면 됩니다.
주 생성자 및 보조 생성자에 모두 사용 가능합니다.
class ClassC @TA constructor () {
var name: String = "ClassC::name"
@TA constructor ( name: String ): this() {
this.name = name
}
}
expression ( 표현식 )
사용하려면 @Retention에 SOURCE, @Target 에 EXPRESSION 을 지정해 주어야 합니다.
return value를 별도로 취급하는 것처럼 설명한 곳도 있으나 표현식과 동일하게 처리됩니다.
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.EXPRESSION)
annotation class TA_expression
var name1: String = @TA_expression "annotation for expression"
return @TA_expression "return value"
function literal ( 함수 구문 )
일반 함수 선언의 함수 리터럴 앞에는 추가할 수 없으며 lambda 구문에만 사용할 수 있습니다.
var lambda = @TA { if ( num > 10 ) 100 else 0 }
var func3: (Int)-> Int = @TA { num-> num }
전체 예제
'코틀린( Kotlin )' 카테고리의 다른 글
코틀린 6-8 Annotations - Java Annotations (0) | 2020.04.20 |
---|---|
코틀린 6-7 Annotations - Use-site Targets (0) | 2020.04.19 |
코틀린 6-5 Annotations - Annotation class의 생성자 (0) | 2020.04.18 |
코틀린 6-4 Annotations - Usage(Annotation들의 간단한 사용 예) (0) | 2020.04.17 |
코틀린 6-3 Annotations - 속성(meta-annotations) (0) | 2020.04.17 |