파일시스템 계층

모듈의 내용을 기술하지 않으면, 러스트는 다른 파일에서 그 내용을 읽습니다:

mod garden;

위 코드는 러스트로 하여금 garden모듈의 내용을 src/garden.rs에서 찾도록 합니다. 비슷하게, garden::vegetables 모듈은 src/garden/vegetables.rs에서 찾습니다.

crate(크레이트)의 루트는 아래 경로 입니다:

  • src/lib.rs (라이브러리 크레이트)
  • src/main.rs (바이너리 크레이트)

모듈도 “내부 문서 주석“을 사용하여 문서화할 수 있습니다. 이러한 모듈은 모듈이 포함된 항목(이 경우에는 모듈)을 문서화합니다.

//! 이 모듈은 정원을 구현합니다.

// 이 모듈에서 타입을 다시 내보냅니다.
pub use garden::Garden;
pub use seeds::SeedPacket;

/// 주어진 씨앗 패킷을 뿌립니다.
pub fn sow(seeds: Vec<SeedPacket>) {
    todo!()
}

/// 준비된 농작물을 정원에서 수확합니다.
pub fn harvest(garden: &mut Garden) {
    todo!()
}
This slide should take about 5 minutes.
  • module/mod.rsmodule.rs로 바꾼다 하더라도 Rust 2018에서는 하위 모듈을 사용할 수 있습니다.

  • filename.rsfilename/mod.rs대신 사용할 수 있도록 하는 주된 이유는, mod.rs라는 이름을 가진 파일이 많을 경우 IDE에서 이들을 서로 구별하는게 힘들기 때문입니다.

  • 폴더를 이용해서 더 깊은 계층 구조를 구현할 수 있습니다. 심지어는 메인 모듈이 파일이더라도요:

    src/
    ├── main.rs
    ├── top_module.rs
    └── top_module/
        └── sub_module.rs
    
  • 러스트가 어디서 모듈들을 찾을지는 컴파일러 디렉티브로 변경 가능합니다:

    #[path = "some/path.rs"]
    mod some_module;

    이는 Go언어 에서처럼 어떤 모듈의 테스트를 some_module_test.rs 같은 파일에 두고 싶은 경우에 유용합니다.