완전히 한정된 네임스페이스에서 중복된 이름 피하기

완전히 한정된 네임스페이스에서 중복된 이름 피하기

컴파일러가 모든 선언에 완전히 한정된 네임스페이스(fully qualified namespace)를 부여하고, 그 구조는 트리(tree) 형태를 이룹니다. 이름을 지을 때는 이 완전히 한정된 네임스페이스를 기준으로 삼아서, 중복되는 이름 조각을 피하는 게 좋아요.

출처: Zig Documentation

본문

모든 선언은 컴파일러가 부여한 완전히 한정된 네임스페이스를 가지게 되면서 트리 구조를 만듭니다. 이름을 정할 때는 완전히 한정된 네임스페이스를 기준으로 삼고, 중복되는 이름 조각은 피하세요.

const std = @import("std");

pub const json = struct {
    pub const JsonValue = union(enum) {
        number: f64,
        boolean: bool,
        // ...
    };
};

pub fn main() void {
    std.debug.print("{s}\n", .{@typeName(json.JsonValue)});
}
$ zig build-exe redundant_fqn.zig
$ ./redundant_fqn
redundant_fqn.json.JsonValue

이 예시에서 json이라는 이름이 완전히 한정된 네임스페이스에 중복해서 들어가 있어요. 해결책은 JsonValue에서 Json 부분을 지우는 겁니다. 여기서는 json이라는 빈 struct를 예로 들었지만, 파일 자체도 완전히 한정된 네임스페이스의 일부로 작동한다는 점을 기억해 두세요.

이 예시는 Avoid Redundancy in Names에서 다룬 규칙의 예외에 해당합니다. 타입의 의미가 핵심까지 줄어들어 있거든요 — 이 값은 어디까지나 "json 값(json value)"이라는 뜻입니다. 이보다 더 구체적으로 줄이면 오히려 의미가 틀어지니까요.

더 알아보기