Module (Rust)
다른 파일에서 모듈 가져오기
main.rs파일에서src/services/user.rs파일의Userstruct를 쓰고자 한다.
+ src
| + main.rs
| + lib.rs
| + services
| | + user.rs
- 그냥
use crate::services::user를 하면 루트에 파일이 없다는 에러가 발생한다.
// src/services/user.rs
pub struct User { ... }
- 루트의
lib.rs파일에 모듈을 공개해야 한다.
// src/lib.rs
pub mod services {
pub mod user;
}
-
디렉토리, 파일 자체가 하나의 모듈이다.
services모듈 안에user모듈이 있는 것. -
pub mod user;는user모듈(파일)의 내용을 다른 위치에서 찾으라는 의미다.pub mod services { pub mod user { // contents of services/user.rs } } -
이제
main.rs에서 루트를 기준으로services모듈과 그 안의user모듈을 찾을 수 있다.
// src/main.rs
use crate::services::user::User;
fn main() {
let user = User { ... };
// do something...
}
mod.rs파일을 이용해 디렉토리 모듈 자체만 공개할 수도 있다.
+ src
| + main.rs
| + lib.rs
| + services
| | + mod.rs
// src/services/mod.rs
pub struct User { ... }
// src/lib.rs
pub mod services;
// src/main.rs
use crate::services::User;
fn main() {
let user = User { ... };
// do something...
}
크레이트와 모듈의 차이
- 크레이트는 컴파일 단위로, 컴파일러가 다룰 수 있는 가장 작은 규모의 코드를 말한다.
- 모듈은 크레이트 안에 있는 코드 구조의 단위를 말한다.
mod- 모듈이 존재함을 선언.use- 다른 곳에 선언된 모듈을 참조해 그 내용을 현재 모듈의 스코프에 가져온다.