모듈 트리와 공개 API는 같은 구조가 아니다

경로가 존재해도 각 경계의 가시성을 통과해야 접근할 수 있다.

두 축을 분리mod는 이름 공간을 트리에 연결하고, pub은 특정 경계를 연다. 공개 모듈의 내부가 자동으로 공개되지는 않는다.

내부 모듈 트리

crate 기준
  • crate
    • front_of_house private
      • hosting pub
        • add_to_waitlist pub
      • serving private

이름이 보이는 조건

visibility gates
private

item은 기본적으로 부모 모듈에 비공개다.

pub

현재 item 경계만 연다. 접근 경로의 다른 경계도 통과해야 한다.

pub(crate)

같은 crate 안에서만 보이고 외부 crate에는 숨는다.

use / pub use

use는 현재 scope의 별칭, pub use는 새 공개 경로다.

pub use …::add_to_waitlist;restaurant::add_to_waitlist()

컴파일 오류를 읽는 순서경로 철자 → mod 선언 → 조상 모듈 가시성 → 최종 item 가시성을 차례로 확인한다.