extern 유니언

extern 유니언 (extern union)

C 코드와 공유할 구조체를 만들 때 메모리 배치가 어떻게 될지 걱정된 적 있으신가요? Zig는 그런 상황에 대비해 미리 정해진 타입들을 마련해 두는데, 그중 하나가 바로 extern union이에요. 이름에서 느껴지듯 외부(C ABI)와 맞물리는 유니언이라고 생각하시면 돼요.

출처: Zig Documentation

본문

extern union은 메모리 레이아웃이 대상(target) C ABI와 호환되도록 보장돼요.

extern union

좀 더 풀어 말하면, 이 타입은 메모리 레이아웃이 대상 C ABI와 호환되도록 보장돼요. C 코드의 유니언과 동일한 배치 규칙을 따르기 때문에, FFI(외부 함수 인터페이스)로 C 라이브러리와 데이터를 주고받을 때 양쪽이 같은 방식으로 메모리를 해석한다는 뜻이에요. 그래서 구조체 쪽에서도 같은 역할을 하는 extern struct와 짝을 이루는 개념이에요.

구체적인 필드 선언이나 사용 규칙은 보통 구조체·유니언과 비슷하지만, 핵심은 C ABI와의 호환성이 보장된다는 점이에요. 내부 레이아웃을 자유롭게 재배치하는 타입과 달리, 외부와 주고받을 목적에 맞게 배치가 고정되어 있죠.

더 알아보기

  • extern struct — 같은 C ABI 호환 보장이 구조체에서 어떻게 적용되는지.