프로그램이 한 파일을 넘어 자라면 구조가 필요해: 관련 코드를 묶고 어디서 뭐가 보이는지 제어하는 법. Rust 의 답이 모듈 시스템 — mod, 가시성, use 야.
mod: 코드 묶기
mod name { ... } 가 모듈을 선언해 — 관련 항목의 이름 붙은 네임스페이스. 모듈은 중첩되고, 파일에 자연스럽게 매핑돼: mod foo; 가 Rust 한테 foo.rs (또는 foo/mod.rs) 를 그 모듈로 로드하라고 해. 크레이트에 뿌리내린 모듈 트리를 지어.
가시성: 기본 private
Rust 의 모든 건 기본 자기 모듈에 private — 함수, struct, 필드가 정의한 모듈 (과 자식) 에서만 보여. pub 으로 가시성에 opt-in 해: pub fn, pub struct, 개별 필드의 pub. 많은 언어의 기본-공개와 반대고, 의도적이야: API 표면을 명시적으로 노출해서 아무것도 실수로 안 새.
기본 private; pub 은 opt-in. 모듈 내부는
pub 으로 표시하지 않으면 숨어 있어. 이게 공개 API 를 의식적이고 보이는 선택으로 만들어 — pub 항목만 호출자와의 계약이란 걸 알고 내부를 자유롭게 리팩터해.use: 경로를 스코프로 가져오기
use crate::foo::bar 가 bar 를 스코프로 가져와 한정 없이 부를 수 있게 해. 경로는 crate (크레이트 루트), self (현재 모듈), super (부모) 에서 시작해. use 는 그냥 import 야 — 코드를 옮기는 게 아니라 참조하는 법을 줄일 뿐. 관용적 Rust 는 use 문을 각 파일 위에 모아.