Visibility

๋ชจ๋“ˆ์˜ ๊ธฐ๋ณธ ์ ‘๊ทผ์ž๋Š” private ์ž…๋‹ˆ๋‹ค:

  • ๋ชจ๋“ˆ์˜ ํ•ญ๋ชฉ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ private ์ž…๋‹ˆ๋‹ค.(๊ตฌํ˜„์—์„œ ์ˆจ๊ฒจ์ง)
  • ๋ถ€๋ชจ์™€ ์ด์›ƒ ํ•ญ๋ชฉ์—์„œ๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Modules are a privacy boundary:

  • Module items are private by default (hides implementation details).
  • Parent and sibling items are always visible.
mod outer {
    fn private() {
        println!("outer::private");
    }

    pub fn public() {
        println!("outer::public");
    }

    mod inner {
        fn private() {
            println!("outer::inner::private");
        }

        pub fn public() {
            println!("outer::inner::public");
            super::private();
        }
    }
}

fn main() {
    outer::public();
}