MODULE VISIBILITY

Rust 모듈 공개 범위

mod를 폴더 나누기 정도로 이해하면 pub과 use 오류를 자주 만난다. Rust 모듈은 crate 안의 이름 공간을 만들고, item의 기본 비공개 규칙을 적용하며, pub, pub(crate), use, re-export로 외부에 보일 표면을 정한다.

01

이름 공간 나누기

관련 item을 모듈로 묶고 외부에서 어떤 이름으로 접근해야 하는지 정한다.

파일 구조는 모듈 선언을 따라간다
02

mod 선언 확인

부모 모듈에서 mod를 선언해야 하위 파일이 컴파일에 포함된다.

파일이 있어도 선언이 없으면 모듈이 아니다
03

공개 범위 지정

기본은 private이므로 외부 API만 pub 또는 pub(crate)로 연다.

무작정 pub은 내부 변경을 어렵게 한다
04

경로 정리

crate, self, super를 사용해 절대 경로와 상대 경로를 의도적으로 고른다.

use는 이름을 가져오는 것이지 소유권 이동이 아니다
05

재노출 설계

lib.rs나 mod.rs에서 공개 API에 필요한 타입을 re-export해 사용자 API를 좁게 만든다.

내부 폴더 구조를 API로 노출하지 않는다
mod
모듈 포함 선언 파일이나 inline 블록을 모듈 트리에 연결한다.
선언 위치가 부모를 정한다
pub
외부 공개 item을 부모 밖에서 접근 가능하게 하지만 부모 모듈 경로도 열려 있어야 한다.
경로 전체 공개성을 본다
pub(crate)
crate 내부 공개 라이브러리 외부에는 숨기고 내부 모듈끼리는 공유한다.
내부 구현 타입에 적합하다
use
경로 단축 긴 경로 이름을 현재 scope로 가져와 읽기 쉽게 한다.
item을 복사하는 동작이 아니다

모듈 확인

공개 API 외부 사용자가 접근해야 할 타입만 pub으로 열렸는지 확인한다.
경로 오류 unresolved import가 mod 선언 누락인지 경로 기준 오류인지 구분한다.
재노출 내부 폴더 구조가 외부 API에 불필요하게 드러나지 않는지 본다.