Rust 7

코와->코어·2022년 5월 8일
0

Packages, Crates, Modules

1. 패키지와 크레이트

크레이트는 바이너리/라이브러리
패키지는 여러 기능을 제공하는 하나 이상의 크레이트
패키지는 최대 하나의 라이브러리 크레이트를 가질 수 있다.
패키지는 여러 바이너리 크레이트를 가질 수 있지만, 최소 하나의 바이너리 크레이트는 가지고 있어야 함

바이너리 1개만 존재 : src/main.rs
라이브러리 1개/바이너리 1개 : src/main.rs, src/lib.rs
라이브러리 1개/바이너리 여러 개 : src.bin/...,
각 바이너리 크레이트들으 src/bin 디렉토리 안에 두여야 함

2. 모듈

모듈은 크레이트 안에서 코드를 그룹별로 정리하게 쉽게 해줌
각 항목들이 pulbic이어도 되는지, private이어야 하는지 정리 가능

mod front_of_house {
mod hosting {
fn add_to_waitlist() {}

    fn seat_at_table() {}
}

mod serving {
    fn take_order() {}

    fn serve_order() {}

    fn take_payment() {}
}

}

모듈 트리

crate
└── front_of_house
├── hosting
│ ├── add_to_waitlist
│ └── seat_at_table
└── serving
├── take_order
├── serve_order
└── take_payment

3. path

모듈 트리에서 내가 원하는 항목 찾기 위해 path 경로를 사용한다.

  • 절대 경로 : crate에서 시작
  • 상대 경로 : 이름으로 시작하는 건 상대경로 의미

기본적으로 모든 아이템이 private
부모 모듈에 ㅇㅆ는 항목들은 자식 모듈에 이쓴 private항목을 사용하지 못함

자식 모듈에 이쓴 항목들은 부모 모듈에 이쓴 항속 사용 ㅎ가능

자식 모듈에 이쓴 거를 공개하고 싶을 때 앞에 pub 키워드 붙임

mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}

pub fn eat_at_restaurant() {
// Absolute path
crate::front_of_house::hosting::add_to_waitlist();

// Relative path
front_of_house::hosting::add_to_waitlist();

}

super 키워드를 사용해서 상대 경로 쉽게 적을 수 있음

struct로 만들면 기본적으로 private이지만
enum으로 만들면 기본적으로 public이다

4. use

use 키워드로 경로 짧게 표현 가능
함수를 불러올 때는 부모에서부터 가졍ㅁ
struct, enum 다른ㄴ 아이템ㅇ들은절대경로로 가져옴
이름이 같은 항목이 있으면 부모 모듈로 가져옴

아니면 이름이 같으면 as로 다른 이름 붙여도 됨

pub use

mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}

pub use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}

listing them in your package’s Cargo.toml file and using use to bring items from their crates into scope

짧은 경로로 내가 선언한 함수 호출 가능

use std::{cmp::Ordering, io};
use std::io::{self, Write};
use std::collections::*;

5. 다른 파일로 모듈 분리하기

profile
풀스택 웹개발자👩‍💻✨️

0개의 댓글