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

오류 열거형 (Error Enums)

이전 연습 문제에서 작성한 해결책이 조금 어색하게 느껴졌을 수도 있습니다. 문자열을 패턴 매칭(Pattern matching)에 직접 사용하는 것은 좋은 방법이 아니기 때문이죠! 만약 동료가 가독성을 높이기 위해 Ticket::new가 반환하는 오류 메시지를 수정한다면, 그 함수를 호출하던 여러분의 코드는 갑자기 작동하지 않게 될 것입니다(Breaking changes).

이 문제를 해결할 수 있는 도구는 이미 우리가 배운 것에 있습니다. 바로 **열거형(Enum)**입니다!

오류에 대처하기

발생한 특정 오류 상황에 따라 호출자가 다르게 동작하도록 만들고 싶다면, 열거형을 사용해 다양한 오류 케이스를 정의할 수 있습니다.

// 문자열에서 `u32`를 파싱할 때 발생할 수 있는
// 다양한 오류 상황을 나타내는 오류 열거형.
enum U32ParseError {
    NotANumber,
    TooLarge,
    Negative,
}

오류 열거형을 사용하면 발생 가능한 오류 상황들을 타입 시스템에 직접 인코딩하게 됩니다. 이는 실패할 가능성이 있는 함수의 **시그니처(Signature)**의 일부가 되죠. 이제 호출하는 쪽에서는 match 표현식을 사용해 각각의 오류 케이스에 맞게 대응할 수 있어, 오류 처리가 훨씬 명확하고 간결해집니다.

match s.parse_u32() {
    Ok(n) => n,
    Err(U32ParseError::Negative) => 0,
    Err(U32ParseError::TooLarge) => u32::MAX,
    Err(U32ParseError::NotANumber) => {
        panic!("숫자가 아닙니다: {}", s);
    }
}

Exercise

The exercise for this section is located in 05_ticket_v2/08_error_enums