9.5 File hierarchy

모듈들은 파일/디렉토리로 이뤄진 계층 구조로 그려질 수 있다. 가시성 예제 파일들을 나눠서 살펴보자.

$ tree .
.
|-- my
|   |-- inaccessible.rs
|   |-- mod.rs
|   `-- nested.rs
`-- split.rs
// split.rs
// 이 선언은 `my.rs` 또는 `my /mod.rs` 파일을 찾고 
// 해당 내용을 범위 밑의 `my` 모듈에 삽입합니다. 
mod my;

fn function() {
    println!("called `function()`");
}

fn main() {
    my::function();

    function();

    my::indirect_access();

    my::nested::function();
}
// my/mod.rs
// 비슷하게 `mod inaccessible`와 `mod nested`는 `nested.rs`와 
// `inaccessible.rs` 파일을 찾아서 각각의 모듈 아래에 삽입한다.
mod inaccessible;
pub mod nested;

pub fn function() {
    println!("called `my::function()`");
}

fn private_function() {
    println!("called `my::private_function()`");
}

pub fn indirect_access() {
    print!("called `my::indirect_access()`, that\n> ");

    private_function();
}
// my/nested.rs
pub fn function() {
    println!("called `my::nested::function()`");
}

#[allow(dead_code)]
fn private_function() {
    println!("called `my::nested::private_function()`");
}
// my/inaccessible.rs
#[allow(dead_code)]
pub fn public_function() {
    println!("called `my::inaccessible::public_function()`");
}

전과 같이 계속 동작하는지 확인해 봅시다:

$ rustc split.rs && ./split
called `my::function()`
called `function()`
called `my::indirect_access()`, that
> called `my::private_function()`
called `my::nested::function()`

results matching ""

    No results matching ""