9장 - 프로젝트 구성과 구조

모듈

  • 모든 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::PIPI 만으로 참조
  • std표준 라이브러리(standard library)의 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;
foo.rs 파일이나 foo/mod.rs 파일을 찾아 이 scope 내의 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 module
std::prelude::*로 내보내기 된 모든 것들이 어디에서든 자동으로 사용 가능
  • Ex> Vec, Box, Option , Copy , …

여러분만의 Prelude

use my_library::prelude::*my_library의 흔한 데이터 구조들을 모두 가져오는 시작점
std 와 달리 자동으로 쓸 수는 없음.

The Rust Programming Language 링크