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

열거형(Enums)

이전 챕터에서 작성한 유효성 검사 로직을 떠올려 보세요. 티켓의 상태는 To-Do, InProgress, Done 중 하나여야만 유효합니다. 하지만 현재 Ticket 구조체의 status 필드나 new 메서드의 매개변수 타입을 보면 이 점이 명확히 드러나지 않습니다.

#[derive(Debug, PartialEq)]
pub struct Ticket {
    title: String,
    description: String,
    status: String,
}

impl Ticket {
    pub fn new(
        title: String, 
        description: String, 
        status: String
    ) -> Self {
        // [...]
    }
}

두 곳 모두 상태를 나타내기 위해 String 타입을 사용하고 있습니다. String은 너무 범용적인 타입이라, status가 가질 수 있는 값이 제한되어 있다는 정보를 전달하지 못합니다. 더 큰 문제는, Ticket::new를 호출하는 쪽에서 입력한 상태값이 유효한지 여부를 오직 **실행 시점(Runtime)**에만 알 수 있다는 점입니다.

**열거형(Enums)**을 사용하면 이 문제를 훨씬 더 깔끔하게 해결할 수 있습니다.

enum

열거형(Enums)은 **베리언트(Variants)**라고 부르는 고정된 값들의 집합을 정의할 수 있는 타입입니다. Rust에서는 enum 키워드를 사용해 열거형을 정의합니다.

enum Status {
    ToDo,
    InProgress,
    Done,
}

struct와 마찬가지로, enum을 정의하면 새로운 Rust 타입이 만들어집니다.

Exercise

The exercise for this section is located in 05_ticket_v2/01_enum