7장. 모듈 시스템
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의 모듈 시스템을 사용하면 코드의 구조를 체계적으로 만들고, 관련된 항목을 그룹화하여 가독성과 재사용성을 높일 수 있습니다.
모듈 활용
패키지와 크레이트
- Rust의 패키지는 여러 크레이트로 구성될 수 있습니다. 예를 들어,
Cargo.toml
파일에서 패키지를 정의하고,src/main.rs
에서 크레이트를 사용하여 실행 가능한 프로그램을 만들 수 있습니다.
[package] name = "my_project" version = "0.1.0" edition = "2021"
fn main() { println!("Hello, world!"); }
- Rust의 패키지는 여러 크레이트로 구성될 수 있습니다. 예를 들어,
모듈 정의
- 모듈은 관련된 기능을 그룹화하는 데 사용됩니다. 예를 들어,
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
에서 사용할 수 있습니다.- 모듈이 커지면 별도의 파일로 분리하여 관리할 수 있습니다. 예를 들어,
'IT Best Practise > Rust' 카테고리의 다른 글
09. 에러 처리 (1) | 2024.11.07 |
---|---|
08. 컬렉션 (0) | 2024.11.07 |
06. 열거형과 패턴 매칭 (0) | 2024.11.07 |
05. 구조체 (1) | 2024.11.07 |
04. 소유권 이해하기 (0) | 2024.11.07 |