모듈프로그램 작성하기라이브러리 작성하기다른 모듈과 크레이트 참조하기여러 개의 항목을 참조하기모듈 작성하기모듈 계층구조인라인 모듈내부 모듈 참조하기내보내기구조체 가시성전주곡 (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
와 달리 자동으로 쓸 수는 없음.