728x90
Chapter 7
모듈 시스템
- 패키지 : 상자를 만들고, 테스트하고, 공유할 수 있는 Cargo기능
- 크레이트 : 라이브러리나 실행 파일을 생성하는 모듈 트리
- 모듈 및 사용 : 경로의 구성, 범위 및 개인 정보 보호를 제어할 수 있다.
- 경로 : 구조체, 함수 또는 모듈과 같은 항목의 이름을 지정하는 방법
0. 크레이트
- Rust 컴파일러가 한 번에 고려하는 가장 작은 양의 코드.
- 크레이트는 모듈을 포함할 수 있으며, 모듈은 크레이트와 함께 컴파일되는 다른 파일에 정의될 수 있다.
- 바이너리 크레이트 : 명령줄 프로그램이나 서버와 같이 실행할 수 있는 실행 파일로 컴파일할 수 있는 프로그램. (main)
- src/main.rs
- 라이브러리 크레이트 : 기능이 없고 main 실행 파일로 컴파일되지 않는다. 대신 여러 프로젝트에서 공유하도록 의도된 기능을 정의한다. ex) rand
- 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 : 외부 패키지나 글로벌 오퍼레이터를 가져옴
모듈 작동 방법
- 크레이트 루트 : 크레이트 루트 파일에서 컴파일할 코드를 찾는다.
- 모듈 선언 : 크레이트 루트 파일에서 새 모듈을 선언한다.
- 하위 모듈 선언
- 모듈의 코드 경로 : 모듈이 크레이트의 일부가 되면, 개인 정보 보호 규칙 내에서 다른 곳에서 모듈 참조 가능
- 비공개 vs 공개 : 공개로 선언하려면
pub mod
로 선언한다. - use : 바로가기
장점 : 코드를 크레이트 내에 정리하여 가독성을 높히고 쉽게 재사용할 수 있다.
기본적으로 비공개 ⇒ 개인 정보 제어 가능
- 모듈 트리는 src/lib.rs 에 정의되어야 한다. → 모든 공개 항목은 패키지 이름으로 경로를 시작하여 바이너리 크레이트에서 사용 가능.
3. 경로
절대 경로 : 크레이트 루트에서 시작하는 전체 경로. 외부 크레이트의 코드의 경우 절대 경로는 크레이트 이름으로 시작함
crate
상대 경로 : 현재 모듈에서 시작하여 식별자
self
,super
등을 사용함.- 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 |