728x90
반응형

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!");
    }
  • 모듈 정의

    • 모듈은 관련된 기능을 그룹화하는 데 사용됩니다. 예를 들어, 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에서 사용할 수 있습니다.

728x90
반응형

'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

+ Recent posts