rust enum 연관된 데이터가 있는 경우

wangki·2025년 7월 15일
0

Rust

목록 보기
38/54

개요

OpenSource를 보다가 enum을 사용 시 깔끔한 방법이 있어서 간단히 정리한다.

내용


#[derive(Default, PartialEq)]
enum LoginState {
    #[default]
    Logout,
    Login,
}

impl LoginState {
    pub fn new() -> Self {
        LoginState::default()
    }
}

fn main() {
    let login_state = LoginState::new();
    
    match login_state {
        LoginState::Logout => println!("로그아웃 상태입니다!"),
        LoginState::Login => println!("로그인 상태입니다!"),
    }

    if login_state == LoginState::Login {
        println!("로그인 상태입니다!");
    } else {
        println!("로그아웃 상태입니다!")
    }

}

enum의 값을 확인하기 위해서는 matchif를 활용한다. 위에서 사용한 enum의 경우 연관된 데이터가 없는 경우이다.
만약에 연관된 데이터가 존재하는 경우는 어떻게 처리해야 하는지 알아보겠다.

#[derive(PartialEq)]
enum UserInput {
    KeyBoard(char),
    Mouse,
    Voice
}

fn main() {
    let user_input = UserInput::KeyBoard('a');
    match user_input {
        UserInput::KeyBoard(c) => println!("keyboard input: {}", c),
        UserInput::Mouse => println!("mouse input"),
        UserInput::Voice => println!("voice input"),
    }
}

만약에 Keyboard라는 필드 값에 연관 데이터가 존재하여 연관 데이터값을 가져오기 위해서는 패턴 매칭을 해야 한다.

만약에 KeyBoard에 대한 연관 데이터만 가져오기 위해서라도 match를 사용해야 한다.
if let을 사용하면 깔끔하게 가져올 수 있다.


fn main() {
    let user_input = UserInput::KeyBoard('a');
 
    if let UserInput::KeyBoard(c) = user_input {
        println!("keyboard input: {}", c);
    }
}

위처럼 원하는 값만 가져올 수 있다.

결론

요즘 rust로 실제 개발된 opensource들을 분석 및 공부하고 있는데 알지 못했던 문법 및 표현법들이 있는 것 같다.
좋은 방법들은 정리를 해나갈 것이다.

0개의 댓글