6.10 메타데이터(Metadata)
6.10 메타데이터(Metadata)
여러 구조에 사용자 정의 메타데이터를 붙일 수 있어요:
class와enum선언- 클래스 필드
- enum 생성자
- 표현식
이 메타데이터 정보는 런타임에 haxe.rtti.Meta API를 통해 얻을 수 있습니다:
import haxe.rtti.Meta;
@author("Nicolas")
@:keep
class MyClass {
@range(1, 8)
var value:Int;
@broken
static function method() {}
}
class Main {
static public function main() {
// { author : ["Nicolas"] }
trace(Meta.getType(MyClass));
// [1,8]
trace(Meta.getFields(MyClass).value.range);
// { broken: null }
trace(Meta.getStatics(MyClass).method);
}
}
선행 @ 문자, 메타데이터 이름, 그리고 선택적으로 괄호 안의 쉼표로 구분된 상수 인자 수로 메타데이터를 쉽게 식별할 수 있어요.
클래스 MyClass는 단일 String 인자 "Nicolas"를 가진 author 메타데이터와 인자 없는 :keep 메타데이터를 가집니다.
멤버 변수 value는 두 Int 인자 1과 8을 가진 range 메타데이터를 가집니다.
static 메서드 method는 인자 없는 broken 메타데이터를 가집니다.
main 메서드는 API를 사용해 이 메타데이터 값들에 접근합니다. 출력은 얻은 데이터의 구조를 드러냅니다:
- 각 메타데이터마다 필드가 있고, 필드 이름이 메타데이터 이름입니다.
- 필드 값은 메타데이터 인자에 대응합니다. 인자가 없으면 필드 값은
null이고, 그렇지 않으면 인자당 하나의 요소를 가진 배열입니다.
메타데이터 인자로 허용되는 값은 다음과 같아요:
- 상수(Constants)
- 배열 선언(array declarations)(모든 요소가 자격이 되면)
- 객체 선언(object declarations)(모든 필드 값이 자격이 되면)
컴파일 타임 메타데이터(Compile-time Metadata)
@:keep처럼 :로 시작하는 메타데이터는 컴파일 타임에만 사용할 수 있고, 런타임에는 생략됩니다. 매크로나 Haxe 컴파일러 자체가 사용할 수 있어요. 런타임 메타데이터와 달리 컴파일 타임 메타데이터의 인자는 어떤 유효한 표현식이든 될 수 있습니다.
내장 컴파일러 메타데이터(Built-in Compiler Metadata)
정의된 모든 메타데이터의 전체 목록은 명령줄에서 haxe --help-metas를 실행해 얻을 수 있어요.
Haxe 4.0.0 이후 — Haxe 4 이전에는 메타데이터 이름이 유효한 식별자여야 했습니다. Haxe 4부터 메타데이터 이름은
.기호로 구분된 여러 식별자로 구성될 수 있어요. 이 변경은 주로 컴파일 타임 메타데이터를 쉽게 조직하기 위한 것입니다. 이런 이름을 가진 런타임 메타데이터는 dynamic 접근으로만 접근할 수 있어요.
관련 콘텐츠(Related content) — 컴파일러 메타데이터 목록(Compiler Metadata list)도 참조하세요.
출처: Metadata
본문
메타데이터 기본
@이름(인자...) 형태로 클래스, 필드, enum 생성자, 표현식에 붙입니다. haxe.rtti.Meta API로 런타임 조회가 가능합니다. 인자는 상수, 배열, 객체여야 해요.
컴파일 타임 vs 런타임
:로 시작하는 메타데이터(@:keep)는 컴파일 타임 전용이며 런타임에 생략됩니다. 인자에 임의 표현식이 허용됩니다. haxe --help-metas로 전체 목록을 볼 수 있어요.
Haxe 4의 변경
메타데이터 이름이 .로 구분된 여러 식별자를 허용하게 되었습니다.