@import

@import

프로그램이 점점 커지면 코드를 여러 파일로 나누고 싶어져요. @import는 Zig에서 그걸 해내는 핵심 문이에요. 컴파일 시점에 다른 파일을 현재 컴파일로 끌어오고, 그 파일이 아직 컴파일에 포함되어 있지 않다면 새로 추가해 줘요. 상대 경로든 모듈 이름이든, 한 줄만으로 다른 파일의 내용을 가져올 수 있답니다.

출처: Zig Documentation

본문

@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와 비슷한 경로 규칙을 따라요.