@import
@import
프로그램이 점점 커지면 코드를 여러 파일로 나누고 싶어져요. @import는 Zig에서 그걸 해내는 핵심 문이에요. 컴파일 시점에 다른 파일을 현재 컴파일로 끌어오고, 그 파일이 아직 컴파일에 포함되어 있지 않다면 새로 추가해 줘요. 상대 경로든 모듈 이름이든, 한 줄만으로 다른 파일의 내용을 가져올 수 있답니다.
본문
@import(comptime target: []const u8) anytype
target이 가리키는 파일을 임포트해요. target은 @import 호출이 들어 있는 파일 기준의 상대 경로이거나, 특정 모듈의 이름이에요. 모듈 이름을 쓰면 그 모듈의 루트 소스 파일을 가리키게 돼요. 어느 쪽이든 파일 경로는 .zig(Zig 소스 파일) 또는 .zon(ZON 데이터 파일)으로 끝나야 해요.
target이 Zig 소스 파일을 가리키면, @import는 그 파일의 대응하는 구조체 타입을 돌려줘요. 마치 빌트인 호출이 struct { FILE_CONTENTS }로 치환된 것과 같다고 보면 돼요. 이때 반환 타입은 type이에요.
target이 ZON 파일을 가리키면, @import는 그 파일 안의 리터럴 값을 돌려줘요. 추론된 결과 타입(result type)이 있으면 반환 타입은 그 타입이 되고, ZON 리터럴은 그 타입으로 해석돼요. 결과 타입은 ZON 표현식 전체에 걸쳐 전파된답니다. 추론된 타입이 없으면 반환 타입은 빌트인 호출이 ZON 파일 내용으로 치환된 것과 동등한 Zig 표현식의 타입이 돼요.
다음 모듈들은 항상 임포트할 수 있어요:
@import("std")— Zig 표준 라이브러리(Standard Library).@import("builtin")— 타깃별 정보(Target-specific information).zig build-exe --show-builtin명령이 이 정보를 stdout으로 출력해 줘요.@import("root")— 루트 모듈의 별칭(alias). 일반적인 프로젝트 구조에서는 다시src/main.zig을 가리키는 셈이에요.
더 알아보기
- Compile Variables
- @embedFile — 파일 내용을 컴파일 시점에 통째로 내장하는 빌트인.
@import와 비슷한 경로 규칙을 따라요.