본문 바로가기
Languages/RUST

[RUST] TRPL : Chapter 7 - Project

by odaebum 2024. 11. 29.
728x90

Chapter 7

모듈 시스템

  1. 패키지 : 상자를 만들고, 테스트하고, 공유할 수 있는 Cargo기능
  2. 크레이트 : 라이브러리나 실행 파일을 생성하는 모듈 트리
  3. 모듈 및 사용 : 경로의 구성, 범위 및 개인 정보 보호를 제어할 수 있다.
  4. 경로 : 구조체, 함수 또는 모듈과 같은 항목의 이름을 지정하는 방법

0. 크레이트

  • Rust 컴파일러가 한 번에 고려하는 가장 작은 양의 코드.
  • 크레이트는 모듈을 포함할 수 있으며, 모듈은 크레이트와 함께 컴파일되는 다른 파일에 정의될 수 있다.
  1. 바이너리 크레이트 : 명령줄 프로그램이나 서버와 같이 실행할 수 있는 실행 파일로 컴파일할 수 있는 프로그램. (main)
    1. src/main.rs
  2. 라이브러리 크레이트 : 기능이 없고 main 실행 파일로 컴파일되지 않는다. 대신 여러 프로젝트에서 공유하도록 의도된 기능을 정의한다. ex) rand
    1. src/lib.rs

1. 패키지

  • 하나 이상의 크레이트의 번들.
  • cargo new my_project 와 같은 경우가 패키지를 생성하는 방식임
    • 이때 생성되는 cargo.toml 이 패키지를 제공함

2. 모듈

  • use : 항목의 이름을 지정할 수 있는 경로

    • ?? pub use는 도대체 무엇인가.

    • 중복되는 범위를 괄호로 묶어서 사용 가능하다.

      // --snip--
      use std::cmp::Ordering;
      use std::io;
      // --snip--
      
      // --snip--
      use std::{cmp::Ordering, io};
      // --snip--
  • pub : 아이템을 publlic화 함

  • as : 외부 패키지나 글로벌 오퍼레이터를 가져옴

  • 모듈 작동 방법

    1. 크레이트 루트 : 크레이트 루트 파일에서 컴파일할 코드를 찾는다.
    2. 모듈 선언 : 크레이트 루트 파일에서 새 모듈을 선언한다.
    3. 하위 모듈 선언
    4. 모듈의 코드 경로 : 모듈이 크레이트의 일부가 되면, 개인 정보 보호 규칙 내에서 다른 곳에서 모듈 참조 가능
    5. 비공개 vs 공개 : 공개로 선언하려면 pub mod 로 선언한다.
    6. use : 바로가기
  • 장점 : 코드를 크레이트 내에 정리하여 가독성을 높히고 쉽게 재사용할 수 있다.

  • 기본적으로 비공개 ⇒ 개인 정보 제어 가능

    • 모듈 트리는 src/lib.rs 에 정의되어야 한다. → 모든 공개 항목은 패키지 이름으로 경로를 시작하여 바이너리 크레이트에서 사용 가능.

3. 경로

  • 절대 경로 : 크레이트 루트에서 시작하는 전체 경로. 외부 크레이트의 코드의 경우 절대 경로는 크레이트 이름으로 시작함 crate

  • 상대 경로 : 현재 모듈에서 시작하여 식별자 self , super 등을 사용함.

    • SUPER
      • 현재 모듈이나 크레이트 루트가 아닌 부모 모듈에서 시작하는 상대 경로를 구성할 수 있다.
  • 모듈에서 pub를 해준다고해서, 내용까지 pub이 되는 것이 아님.

  • 구조체는 pub을 했을 때, 안의 내용을 볼 수 없다

  • enum은 pub을 했을 때 안의 내용을 볼 수 있다.

  • [관용]

    • use로 경로를 가져올 때

    • 함수를 범위로 가져올 때, 부모 모듈까지만 가져온다.

        mod front_of_house {
            pub mod hosting {
                pub fn add_to_waitlist() {}
            }
        }
      
        use crate::front_of_house::hosting::add_to_waitlist;
      
        pub fn eat_at_restaurant() {
            add_to_waitlist();
        }
    • 구조체, 열거형 및 기타 항목을 가져올 때, 전체 범위를 가져온다.

        use std::collections::HashMap;
      
        fn main() {
            let mut map = HashMap::new();
            map.insert(1, 2);
        }
  • 모두 가져올 때는 * 의 glob연산자를 활용한다.

728x90

'Languages > RUST' 카테고리의 다른 글

[RUST] TRPL : Chapter9 - Error Handling  (0) 2024.11.29
[RUST] TRPL : Chapter 8 - Collections  (0) 2024.11.29
[RUST] TRPL : Chapter6 - Enum & Match  (0) 2024.11.28
[RUST] TRPL : Chapter5 - Method & Implement  (0) 2024.11.27
[RUST] &String vs &str  (0) 2024.11.27