모듈프로그램 작성하기라이브러리 작성하기다른 모듈과 크레이트 참조하기여러 개의 항목을 참조하기모듈 작성하기모듈 계층구조인라인 모듈내부 모듈 참조하기내보내기구조체 가시성전주곡 (Prelude)여러분만의 PreludeThe Rust Programming Language 링크
모듈
- 모든 Rust 프로그램이나 라이브러리(library)는 Crate(크레이트)
- 모든 crate는 Module의 계층구조
- 모든 crate에는 Root Module이 있음
- module에는 전역변수, 함수, struct, trait, 또는 다른 module까지도 포함
- module의 트리 구조는 코드로 직접 작성
프로그램 작성하기
- 프로그램은 main.rs라 불리는 파일에 root module을 가짐
라이브러리 작성하기
- 라이브러리는 lib.rs라 불리는 파일에 root module을 가짐
다른 모듈과 크레이트 참조하기
- std::f64::consts::PI→ 모듈 전체 경로로 참조
- use std::f64::consts::PI→- PI만으로 참조
- std는 표준 라이브러리(standard library)의 crate
- https://crates.io/ → Rust 커뮤니티 Crate 레지스트리
use std::f64::consts::PI; fn main() { println!("놀이터에 오신 것을 환영합니다!"); println!("{} 한 조각 먹고 싶군요!", PI); }
여러 개의 항목을 참조하기
- 복수의 항목을 하나의 module 경로로 참조
- → use std::f64::consts::{PI,TAU}
모듈 작성하기
Rust에서 Module을 선언하는 두가지 방법 (ex> 
foo 모듈)- foo.rs라는 이름의 파일
- foo디렉토리에 들어있는 파일- mod.rs
모듈 계층구조
module과 하위모듈(sub-module) 사이에 관계를 만드는 방법
mod foo;인라인 모듈
sub-module은 module의 코드 내에 직접 치환(inline) 가능
// 이 macro는 Rust가 테스트 모드가 아닐 경우 // 이 inline module을 제거합니다. #[cfg(test)] mod tests { // 부모 module에 즉시 접근이 가능하지 않다는 데에 주의하세요. // 반드시 명시적으로 써줘야 합니다. use super::*; ... tests go here ... }
→ 단위 테스트를 만들 때 많이씀
내부 모듈 참조하기
use 경로에 사용할 수 있는 몇 가지 키워드- crate- root module
- super- 현재 module의 부모 module
- self- 현재 module
내보내기
- 기본적으로 module의 구성원들은 외부에서 접근이 불가능
- → pub키워드를 사용하면 모듈의 구성원들을 접근 가능
- 기본적으로 crate의 구성원들도 외부에서 접근이 불가능
- → Root module (lib.rs또는main.rs)에pub을 표시하면 구성원들을 접근 가능
구조체 가시성
structure도 module 외부로 무엇을 노출할지를 
pub을 사용// SeaCreature struct는 우리 module 외부에서도 사용 가능합니다 pub struct SeaCreature { pub animal_type: String, pub name: String, pub arms: i32, pub legs: i32, // 우리의 무기는 비밀로 남겨둡시다 weapon: String, }
전주곡 (Prelude)
Vec나 Box 는 어떻게 쓸 수 있을까? → standard library의 
prelude modulestd::prelude::*로 내보내기 된 모든 것들이 어디에서든 자동으로 사용 가능- Ex> Vec,Box,Option,Copy, …
여러분만의 Prelude
use my_library::prelude::* → my_library의 흔한 데이터 구조들을 모두 가져오는 시작점std 와 달리 자동으로 쓸 수는 없음.