Thinking Different




모듈(mod)

프로그램을 구성하는 구성 요소로, 관련된 데이터와 함수를 하나로 묶은 단위를 의미합니다. 단일 파일로 모든 프로그램을 작성하다 보면 유지보수나 파일의 관리적인 측면 등에서도 문제가 발생될 요지가 많다. 이를 해결하기 위해 함수의 기능별로 따로 파일별 또는 디렉토리별로 모듈을 구성합니다. 이러한 모듈을 메인 프로그램에서 하나의 파일로 작성하는 방식으로 프로그램을 만들게 됩니다.

 

러스트에서 모듈은 mod 키워드를 사용하여 작성되며, 모듈내의 함수 기능들에 대한 기본적인 접근 제어는 private 로 설정되어 있어서 기밀화가 기본이다. 이를 사용하기 위해서 public 으로 설정해야 되는데 필요한 함수 앞에 pub 키워드를 붙혀

서 사용하면 된다.

 

 

모듈(mod) 사용 기본 형식

mod 모듈
{
    // 접근 가능 public
    pub fn public_func() { ... }
    
    // 접근 불가능 private
    fn private_func() { ... }
}

fn main()
{
    // 호출은 아래와 같이 네임스페이스 형식으로 접근 사용한다.
    모듈::public_func();
    
    // private 이므로 에러
    모듈::private_func();
}

 

 

 

모듈(mod)의 계층 구조

 

모듈은 모듈내에서 다른 모듈을 다시 생성할 수 있습니다. 아래와 같습니다.

mod 모듈
{
    pub mod 내부모듈
    {
        pub fn public_inside_func() { ... }
    }
}

fn main()
{
    // 내부 모듈도 아래와 같이 호출
    모듈::내부모듈::public_inside_func();
}

 

 

use 키워드를 사용하여 네임스페이스 간략화하기

 

use 키워드는 위 예제와 같이 main 함수에서 모듈::내부모듈::public_inside_func();  이렇게 불러오면 길이가 길어지고 가독성이 떨어지는 것을 간략화 시켜주는 키워드 입니다. c++ 의 use 키워드와 비슷합니다.

 

mod 모듈
{
    pub mod 내부모듈
    {
        pub fn public_inside_func() { ... }
    }
}

use 모듈::내부모듈;

use 모듈::*;  // 모듈 내부의 모든 것에 접근 가능한 '*'

fn main()
{
    // 내부 모듈도 아래와 같이 호출
    내부모듈::public_inside_func();
}

 

 

모듈을 외부 파일로 생성하여 사용하기

 

 

mod.rs 파일로 생성하여 저장한다. 여기서 달라진 점은 외부 mod 모듈 네임스페이스가 삭제되었고 파일명으로 대체되었다는 것이다.

// mod.rs 파일

// 접근 가능 public
pub fn public_func() { ... }
    
// 접근 불가능 private
fn private_func() { ... }

 

main.rs 에서 아래와 같이 호출한다.

// main.rs 파일

mod 모듈;

fn main()
{
    // 내부 모듈도 아래와 같이 호출
    모듈::public_func();
}

 

 

 

디렉토리 단위로 외부파일 모듈 사용

 

디렉토리 단위로 사용하기 위해서는 폴더명을 모듈 호출변수가 되며, 내부 모듈 파일들은 모두 mod.rs 로 통일해야 된다는 점이 다르다.

 

즉, AAA 라는 디렉토리내의 모듈과 BBB라는 디렉토리의 모듈을 불러오고 싶다면 AAA/mod.rs  파일을 생성하고 BBB/mod.rs 파일을 생성한다. 그리고 모듈 호출을 디렉토리명으로 지정하면 된다.

 

AAA 폴더
    └  mod.rs
BBB 폴더
    └  mod.rs

 

// main.rs 파일

mod AAA;  // AAA 디렉토리내 모듈 불러오기
mod BBB;  // BBB 디렉토리내 모듈 불러오기

fn main()
{
    AAA::모듈함수();
    BBB::모듈함수();
}

 

 

'프로그래밍 언어 > Rust' 카테고리의 다른 글

[Rust] 14. String (문자열)  (0) 2023.02.18
[Rust] 13. 벡터(Vector) 컬렉션 (컨테이너)  (0) 2023.02.17
[Rust] 11. 열거형(enum)  (0) 2023.02.14
[Rust] 10. 구조체(Struct)  (0) 2023.02.10
[Rust] 9. 슬라이스  (0) 2023.02.08