다른 모듈 접근하기



모듈이든 함수든, '::' 를 통해 계층 이동을 수행함.


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

a::series::of::nested_modules();



use 키워드 사용하기


use 키워드를 사용하면 접근을 보다 편하게 할 수 있음.


use a::series::of;

of::nested_modules();


use a::series::of; 는 of 모듈을 사용하겠다는 의미임. 이를 통해 of 모듈에 접근할 수 있음.


use 키워드는 정확히 지정된 그 항목만을 가지고 옴: 그 모듈의 자식까지 가지고 오진 않기 때문에, 아래와 같이 사용할 수는 없음.


use a::series;

of::nested_modules(); // 에러!



of 모듈은 series 모듈의 자식 모듈이지만, use 로 지정된 것은 어디까지나 series 모듈임. 때문에 이 경우 아래와 같이 사용해야 함.


use a::series;

series::of::nested_modules(); // OK



특정 함수만을 가지고 올 수도 있음.


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

nested_modules(); // OK



enum 도 모듈과 같은 하나의 형태를 가지기 때문에, enum 타입을 가지고 오는 일도 가능함. 그것도, enum 타입의 특정 항목만을 가지고 올 수도 있음.


enum TrafficLight {
Red,
Yellow,
Green,
}

use TrafficLight::{Red, Yellow};

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


같은 TrafficLight 타입이라도, Red, Yellow 는 use 를 통해 불러왔기에 바로 접근 가능하지만, Green 의 경우 TrafficLight::Green 의 방식으로 접근해야 함.


모든 enum 항목을 나열하는 일은 번거롭기에, 아래와 같은 처리도 가능.


use TrafficLight::*;

이제 TrafficLight 의 모든 항목을 바로 접근할 수 있음.



super 키워드 사용하기


다른 스코프의 항목 호출 시, 맨 앞에 '::' 을 사용함은 루트에서부터 접근함을 의미함.


::a::series::of::nested_modules();    // 루트 경로의 a 모듈에서부터 접근



파일 시스템에서 루트로 접근할 때와 같이, 루트를 통해 모든 모듈의 경로를 찾아갈 수 있지만, 때로는 상대경로가 편함. super 키워드를 사용하면 바로 위의 부모 모듈에 접근할 수 있음.


super::super::some_function();    // 2단계 상위 모듈의 some_function 호출




'Rust' 카테고리의 다른 글

컬렉션(스트링)  (0) 2018.02.24
컬렉션(벡터)  (0) 2018.02.24
모듈(pub)  (0) 2018.02.22
모듈  (0) 2018.02.22
Enum(if let)  (0) 2018.02.21

+ Recent posts