Rust 입문

[Rust] 모듈

바로크냥 2022. 10. 11. 20:30

1. 모듈

모듈은 네임스페이스입니다. 그 안에 함수, struct, enum, 트레이트 등이 들어 있습니다.

::” 기호로 모듈의 포함 관계를 표현합니다.

다음과 같은 모양입니다.

first::second1::func1

first::second2::func1

위의 예에 두 개의 fubc1이 있습니다. 두 함수의 이름은 같지만 다른 함수입니다. 왜냐하면 모듈이 다르기 때문입니다. 

모듈을 선언할 때는 “mod” 키워드를 사용 합니다.

위의 코드처럼 사용할 수 있는 구조를 가진 모듈 트리를 만들어 보겠습니다.

 

mod first{
   mod second1{
       func1
   }
   mod second2{
       func1
   }
}

만약 func1을 모듈 밖에서 사용하고 싶다면 “pub” 키워드를 같이 사용해야 합니다.

“pub”은 public에서 나온 것입니다. “pub” 키워드를 사용하지 않으면, 기본적으로 모듈은 private으로 설정됩니다.

C# 같은 언어의 public/private과 비슷한 용도입니다. 

다음 코드를 보겠습니다.

 

mod first{
    fn func1(){
        println!("in first");
    }
}

fn main() {
  first::func1();   // 여기서 에러가 발생 합니다.
}

// 출력
..에러
2 |   first::func1();
  |          ^^^^^ private function

“pub” 키워드 없이 func1을 작성하고 사용해 보려고 했습니다.

하지만 에러가 발생합니다.

에러 메시지에도 func1이 private function이라고 알려주고 있습니다.

“pub” 키워드를 사용하고 다시 실행해 보겠습니다.

fn main() {
    first::func1();
}

mod first {
    pub fn func1() {
        println!("in first");
    }
}

//출력
in first

제대로 출력됩니다.


상위 모듈을 부모 모듈, 하위 모듈을 자식 모듈이라고 부르기도 합니다.

first::second1::func1

여기에서 first 모듈은 second1 모듈의 부모 모듈 이고, second1 모듈은 first 모듈의 자식 모듈입니다. 

 

 
반응형