Rust의 모듈 시스템은 코드의 가독성과 재사용성을 높이기 위해 사용됩니다. 모듈은 관련된 함수, 구조체, 열거형 등을 그룹화하여 코드의 구조를 체계적으로 만들 수 있습니다.
모듈은 mod 키워드를 사용하여 정의합니다. 모듈은 파일 내에 정의할 수도 있고, 별도의 파일로 분리할 수도 있습니다.
// src/main.rs
mod network {
pub fn connect() {
println!("Connected to the network.");
}
}
fn main() {
network::connect();
}
위 예제에서 network 모듈을 정의하고, connect 함수를 모듈 내에 정의했습니다. connect 함수는 pub 키워드를 사용하여 공개(public) 함수로 만들었습니다. main 함수에서 network::connect를 호출하여 모듈 내의 함수를 사용할 수 있습니다.
모듈을 별도의 파일로 분리하여 관리할 수도 있습니다. 예를 들어, network 모듈을 src/network.rs 파일로 분리할 수 있습니다.
// src/main.rs
mod network;
fn main() {
network::connect();
}
// src/network.rs
pub fn connect() {
println!("Connected to the network.");
}
이렇게 하면 network 모듈의 코드를 src/network.rs 파일에 작성할 수 있습니다. main.rs 파일에서는 mod network;를 사용하여 모듈을 선언하고, network::connect를 호출할 수 있습니다.
모듈 내에 서브 모듈을 정의할 수도 있습니다.
// src/main.rs
mod network {
pub mod server {
pub fn start() {
println!("Server started.");
}
}
}
fn main() {
network::server::start();
}
위 예제에서 network 모듈 내에 server 서브 모듈을 정의하고, start 함수를 서브 모듈 내에 정의했습니다. main 함수에서 network::server::start를 호출하여 서브 모듈 내의 함수를 사용할 수 있습니다.
모듈 경로를 사용하여 모듈 내의 항목에 접근할 수 있습니다. use 키워드를 사용하여 모듈 경로를 간소화할 수 있습니다.
// src/main.rs
mod network {
pub mod server {
pub fn start() {
println!("Server started.");
}
}
}
use network::server;
fn main() {
server::start();
}
위 예제에서 use network::server;를 사용하여 network::server 모듈 경로를 간소화했습니다. 이제 main 함수에서 server::start를 호출할 수 있습니다.
Rust의 모듈 시스템을 사용하면 코드의 구조를 체계적으로 만들고, 관련된 항목을 그룹화하여 가독성과 재사용성을 높일 수 있습니다.
패키지와 크레이트
Cargo.toml 파일에서 패키지를 정의하고, src/main.rs에서 크레이트를 사용하여 실행 가능한 프로그램을 만들 수 있습니다.[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
fn main() {
println!("Hello, world!");
}
모듈 정의
src/lib.rs 파일에서 모듈을 정의할 수 있습니다.mod my_module {
pub fn my_function() {
println!("Hello from my_function!");
}
}
경로를 사용한 참조
my_module::my_function()을 호출하여 my_function을 사용할 수 있습니다.fn main() {
my_module::my_function();
}
pub 키워드로 공개 범위 제어
pub 키워드를 사용하여 외부에서 접근할 수 있는 함수를 정의합니다. 예를 들어, pub fn public_function()을 사용하여 다른 모듈에서 호출할 수 있도록 합니다.pub mod my_module {
pub fn public_function() {
println!("This is a public function!");
}
}
use 키워드
use 키워드를 사용하여 모듈의 함수를 현재 스코프에 가져옵니다. 예를 들어, use my_module::public_function;을 사용하여 public_function을 직접 호출할 수 있습니다.use my_module::public_function;
fn main() {
public_function();
}
모듈 분리
src/front_of_house.rs 파일을 생성하여 front_of_house 모듈을 정의할 수 있습니다.// src/lib.rs
mod front_of_house;
pub use crate::front_of_house::hosting;
// src/front_of_house.rs
pub mod hosting {
pub fn add_to_waitlist() {
println!("Added to waitlist!");
}
}
이렇게 하면 hosting 모듈의 기능을 src/lib.rs에서 사용할 수 있습니다.