Rust 모듈

mohadang·2023년 1월 23일
0

Rust

목록 보기
16/30
post-thumbnail

모듈

모든 Rust 프로그램이나 라이브러리는 크레이트(Crate)다.
모든 크레이트는 모듈의 계층 구조로 이뤄져 있다.
모든 크레이트에는 최상위 모듈이 있다.
모듈에는 전역 변수, 함수, 구조체, 트레잇, 또는 다른 모듈까지도 포함될 수 있다.
Rust에서는 파일과 모듈 트리 계층 구조 간의 1:1 대응이 없다. 모듈의 트리 구조는 코드로 직접 작성해야 한다.

프로그램은 main.rs라 불리는 파일에 최상위 모듈을 갖고 있다.
라이브러리는 lib.rs라 불리는 파일에 최상위 모듈을 갖고 있다.

모듈 작성

2가지 방법 있음

  • foo.rs라는 이름의 파일
  • foo라는 이름의 디렉터리에 들어있는 mod.rs

모듈 계층 구조

한 모듈은 다른 모듈에 의존할 수 있다. 모듈과 하위 모듈 사이에 관계를 지어주려면, 부모 모듈에 코드 mod 모듈이름 을 작성하면 된다.
foo.rs 파일이나 foo/mod.rs 파일을 찾아 범위 내의 foo 모듈 안에 그 내용물을 삽입한다.

  • src/lib.rs
/*
이 라인의 뜻은 다음과 같다.
mod client {
    // contents of client.rs
}
*/
mod client;

mod network {
    fn connect() {
    }

    mod server {
        fn connect() {
        }
    }
}
  • src/client.rs
fn connect() {
}

인라인 모듈

하위 모듈은 모듈의 코드 내에 직접 치환될 수 있다.
인라인 모듈의 가장 흔한 용도는 유닛 테스트를 만들 때다. Rust가 테스트에 쓰일 때에만 존재하는 인라인 모듈을 만들 수 있다.

#[cfg(test)]
mod tests {
    use super::*;
    ...test code...
}

내부 모듈 참조

Rust에서는 use 경로에 사용할 수 있는 몇 가지 키워드를 통해 원하는 모듈을 빠르게 가져다 쓸 수 있다.

  • crate : 최상위 모듈
  • super : 현재 모듈의 부모 모듈
  • self : 현재 모듈

Prelude

use로 가져오지도 않았는데 Vec, Box등을 쓸 수 있는 이유는 prelude 모듈 덕분이다
Rust의 표준 라이브러리에서는 std::prelude::*로 내보내기된 모든 것들이 어디에서든 자동으로 사용 가능하다.

profile
mohadang

0개의 댓글