Archive/Rust

[Rustlings] 8. module

steelbear 2021. 5. 22. 17:38

mod는 네임스페이스와 비슷한 역활을 한다. mod는 소스코드에서 함수나 매크로 상수, 구조체 등의 요소를 묶는다.

mod sausage_factory {
    fn make_sausage() {
        println!("sausage!");
    }
}

mod 안에서 선언된 모든 요소들은 기본적으로 private다. mod 밖에서 해당 요소에 접근할려면 pub를 붙여줘야 한다.

mod sausage_factory {
    pub fn make_sausage() {
        println!("sausage!");
    }
}

fn main() {
    sausage_factory::make_sausage();
}

하지만 주의해야할 점이 있다. 상위 범위가 public이라고 해서 그 안의 요소가 public이 되지 않는다. 해당 요소에 접근할려면 반드시 지나가는 모든 범위가 public이여야 한다. 그래서 module안에 들어간 module이나 module에서 선언된 함수와 상수나 구조체의 맴버 변수들에 접근할 때 조심해야한다. 이들을 감싸는 요소들도 pub가 붙어야 한다.

mod delicious_snacks {
    pub mod fruits {
        pub const PEAR: &'static str = "Pear";
        pub const APPLE: &'static str = "Apple";
    }
}