2. , 모듈 (파일)
모듈을 만들 때 “mod” 키워드를 사용하는 것을 알았습니다.
그런데 “mod” 키워드를 사용하지 않고 모듈을 만드는 방법이 있습니다.
다른 파일을 만드는 것입니다.
터미널에서
cargo new hello
를 사용해서 프로젝트를 만듭니다.
만들어진 “hello” 프로젝트의 디렉터리로 이동합니다.
cd hello
빌드합니다.
cargo run
또는
cargo build
다음 명령으로 디렉터리의 트리 구조를 봅니다.
명령 중에 ‘-L 2’는 트리의 두 번째 레벨까지만 보여 달라는 의미입니다.
tree -L 2
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
├── CACHEDIR.TAG
└── debug
src 디렉터리에 main.rs 파일이 있습니다.
같은 src 디렉토리에 “second.rs” 파일을 만듭니다.
cd src
touch second.rs
이 파일에 func1과 하위 모듈 third, 그 안의 func1을 작성하고 저장합니다.
pub fn func1(){
println!("in second.rs file");
}
pub mod third{
pub fn func1(){
println!("in third");
}
}
다시 main.rs 파일로 돌아와서 다음처럼 작성합니다.
mod second; // 1 second.rs 파일을 모듈로 사용하겠다는 선언
mod first { // main.rs 안의 first 모듈
pub fn func1() {
println!("in first");
}
}
fn main() {
first::func1();
second::func1(); // 2 second.rs 파일에서 옴
second::third::func1(); // 3 second.rs 파일에서 옴
}
// 출력
in first
in second.rs file
in third
// 1: second.rs에 작성한 func1을 사용하기 위해서
mod second;
를 제일 윗 줄에 추가했습니다.
이렇게 하면 파일 이름을 모듈 이름으로 사용할 수 있습니다.
// 2: second::func1();를 사용해서 second.rs의 func1을 사용했습니다.
// 3: second.rs 파일 안에 만든 third 모듈은 second 모듈의 하위 모듈이 됩니다.
여기서 주의할 점은 third 모듈 앞에도 “pub” 키워드를 사용했다는 것입니다.
pub mod third{
...
}
그리고 이처럼 모듈을 “pub” 키워드로 외부에서 사용할 수 있도록 공개한다고 해도 그 안에 포함된 함수가 자동으로 공개되지는 않습니다.
공개하고자 하는 함수 앞에는 “pub” 카워드를 각각 사용해 줘야 합니다.
pub mod third{
pub fn func1(){
...
}
}
이처럼 다른 파일에 만든 함수나 모듈 등을 사용할 수 있습니다.
이때 파일 이름을 부모 모듈로 사용합니다.
그리고 이들을 모듈로 사용하고자 할 때는 반드시
mod second;
처럼 파일 이름을 모듈로 명시해 주어야 합니다.
'Rust 입문' 카테고리의 다른 글
[Rust] use 사용하기 (0) | 2022.10.11 |
---|---|
[Rust] super (1) | 2022.10.11 |
[Rust] 모듈 (0) | 2022.10.11 |
[Rust] 참조 (대여) (0) | 2022.10.09 |
[Rust] 소유권 (0) | 2022.10.09 |