본문 바로가기
개발/러스트 (Rust)

Rust 기본, 열거형 (Enumerations)

by 레조 2024. 8. 10.

https://rustacean.net/

 

Rust 기본, 열거형 (Enumerations)

 

러스트에서 enum은 단순한 상수 집합 이상의 기능을 제공합니다.

러스트의 enum은 각 변형(variant)이 데이터를 직접 포함할 수 있게 해주며 패턴 매칭 (match) 을 사용하여 이 데이터에 접근할 수 있습니다. 인스턴스 생성 시, 사용자는 이중 콜론('::') 문법을 사용하여 특정 변형을 명시적으로 선택하고, 필요한 데이터를 제공해야합니다.

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
}

let msg = Message::Write(String::from("Hello")); // 인스턴스 생성 시, 필요한 데이터 제공.

이 예에서 'Message::Write' 변형은 'String' 타입의 데이터를 받습니다.

 

또한 enum은 제한된 카테고리가 필요할 경우 주로 사용합니다.

#[derive(Debug)] // enum 타입에 디버그 트레이트 구현을 자동 생성 : 디버그 출력 목적
enum Message {
    Move { x: i32, y: i32 },
    Echo(String),
    ChangeColor(u8, u8, u8),
    Quit
}

impl Message {
    fn call(&self) {
        println!("{:?}", self); // 디버그 출력은 :? 사용한다.
    }
}

fn main() {
    // 다른 언어의 상수와 달리 Rust enum은 인스턴스를 생성하여 높은 활용성을 가진다.
    let messages = [
        Message::Move { x: 10, y: 30 }, // 인스턴스 생성 시, 필요한 데이터 제공.
        Message::Echo(String::from("hello world")),
        Message::ChangeColor(200, 255, 255),
        Message::Quit,
    ];

    for message in &messages {
        message.call();
    }
}