Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

New Type 관용구

newtype 관용구는 프로그램에 올바른 타입의 값이 제공됨을 컴파일 타임에 보장해 줍니다.

예를 들어, 나이를 연 단위로 확인하는 나이 검증 함수는 반드시 Years 타입의 값을 받아야 합니다.

struct Years(i64);

struct Days(i64);

impl Years {
    pub fn to_days(&self) -> Days {
        Days(self.0 * 365)
    }
}

impl Days {
    /// 부분적인 연도는 버립니다
    pub fn to_years(&self) -> Years {
        Years(self.0 / 365)
    }
}

fn is_adult(age: &Years) -> bool {
    age.0 >= 18
}

fn main() {
    let age = Years(25);
    let age_days = age.to_days();
    println!("성인입니까? {}", is_adult(&age));
    println!("성인입니까? {}", is_adult(&age_days.to_years()));
    // println!("성인입니까? {}", is_adult(&age_days));
}

마지막 출력문의 주석을 해제하여 제공되는 타입이 반드시 Years여야 함을 관찰해 보세요.

newtype의 값을 기본 타입으로 얻으려면, 다음과 같이 튜플 또는 구조 분해 문법을 사용할 수 있습니다:

struct Years(i64);

fn main() {
    let years = Years(42);
    let years_as_primitive_1: i64 = years.0; // 튜플
    let Years(years_as_primitive_2) = years; // 구조 분해
}

참고:

structs