[Chapter 7-3] Rust 모듈 - use

hwwwa·2021년 11월 14일
1

🦀 Rust

목록 보기
19/25

이름 가져오기(Importing Names)

pub mod a {
    pub mod series {
        pub mod of {
            pub fn nested_modules() {}
        }
    }
}

fn main() {
    a::series::of::nested_modules();
}

위와 같이 완전하게 경로를 지정한 이름을 참조하는 것은 너무 길어질 수 있습니다. Rust에서는 이러한 호출을 더욱 간결하게 만들어주는 키워드를 가지고 있습니다.

use를 이용한 간결한 가져오기

Rust의 use 키워드는 스코프 내에서 호출하고 싶어하는 함수의 모듈을 가져옴으로써 간결한 호출을 사용할 수 있도록 해줍니다.

pub mod a {
    pub mod series {
        pub mod of {
            pub fn nested_modules() {}
        }
    }
}

use a::series::of;

fn main() {
    of::nested_modules();
}
pub mod a {
    pub mod series {
        pub mod of {
            pub fn nested_modules() {}
        }
    }
}

use a::series::of::nested_modules;

fn main() {
    nested_modules();
}

열거형 또한 모듈과 비슷한 일종의 이름공간을 형성하고 있으므로, 열거형의 variant 또한 use 를 이용할 수 있습니다.

enum TrafficLight {
    Red,
    Yellow,
    Green,
}

use TrafficLight::{Red, Yellow};

fn main() {
    let red = Red;
    let yellow = Yellow;
    let green = TrafficLight::Green;
}

*를 이용한 모두(glob) 가져오기

* 는 이름공간 내에 공개된 모든 아이템을 가져옵니다. glob은 편리하지만 많은 아이템을 가져오기 때문에 이름 간 충돌의 원인이 될 수 있습니다.

enum TrafficLight {
    Red,
    Yellow,
    Green,
}

use TrafficLight::*;

fn main() {
    let red = Red;
    let yellow = Yellow;
    let green = Green;
}

super 를 사용하여 부모 모듈에 접근하기

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        super::client::connect();
    }
}

위의 코드를 아래처럼 변경할 수도 있습니다.

#[cfg(test)]
mod tests {
    use super::client;

    #[test]
    fn it_works() {
        client::connect();
    }
}

0개의 댓글