타입 정보 조회
타입 정보 조회 (@typeInfo)
특정 타입에 대해 컴파일 타임에 정보를 꺼내 보고 싶을 때가 있어요. 예를 들어 구조체에 어떤 필드가 들어 있는지, enum 값은 몇 개인지 같은 것들이요. 그럴 때 쓰는 내장 함수가 @typeInfo예요. 이 함수가 돌려주는 타입 정보에는 필드(fields)와 선언(declarations)이 담기는데, 여기서 가장 기억할 특징은 이 요소들이 소스 파일에 나타난 순서 그대로 보관된다는 보장이에요. 어떤 타입에 무엇이 담기는지, 그 순서 보장이 왜 중요한지 함께 살펴볼게요.
본문
@typeInfo는 타입 반사(type reflection)를 제공하는 내장 함수예요. 시그니처는 다음과 같아요.
@typeInfo(comptime T: type) std.lang.Type
첫 번째 매개변수 T가 comptime 타입으로 선언돼 있어서, 이 함수는 실행 중이 아니라 컴파일 시점에 타입의 정보를 정적으로 조사해요. 그 결과로 std.lang.Type이라는, 타입의 정보를 담는 구조체를 돌려주죠.
여기서 돌려주는 정보에 두 가지 보장이 붙어 있어요.
첫째, struct, union, enum, 그리고 error set(에러 셋)의 타입 정보에는 **필드(fields)**가 담기는데, 이 필드들의 순서가 소스 파일에 나타난 순서와 동일하다는 것이 보장돼요. 필드를 나열하면서 원본 순서를 재현해야 할 때 신뢰하고 쓸 수 있는 이유예요.
둘째, struct, union, enum, 그리고 opaque(불투명 타입)에는 **선언(declarations)**이 담겨요. 여기서도 마찬가지로, 선언들이 소스 파일에 나타난 순서 그대로 유지된다는 보장이 있어요. 필드와 선언을 구분해서 볼 필요가 있는데, 필드는 타입이 지닌 데이터 항목을, 선언은 해당 타입 안에서 선언된 항목들을 가리킨다고 보면 돼요.