Daily Rust Study - 열거형

Koowater·2024년 8월 20일
0
post-thumbnail

참고한 자료 - The Rust Programming Language : 열거형 정의하기

열거형 정의 방법

enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}
  • Rust는 열거형의 각 variant에 데이터를 저장할 수 있습니다. 데이터를 저장하는 형식은 위와 같이 매우 자유롭습니다.
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}
  • 각 variant는 데이터를 꼭 저장할 필요는 없습니다. 위 코드 속 Message 열거형의 Quit varient가 그 예시입니다. 그리고 Move variant처럼 구조체와 유사하게 이름이 있는 필드를 가질 수도 있습니다.
impl Message {
    fn call(&self) {
        // 메서드 본문이 여기 정의될 것입니다
    }
}
  • 각 열거형은 구조체처럼 열거형에서 사용할 수 있는 메서드를 정의할 수 있습니다. 위 코드는 Message 열거형에 call이라는 메서드를 정의하고 있습니다.

Option 열거형

// Option 열거형의 varient를 사용하기 위해 앞에 `Option::`을 사용하지 않아도 됩니다.
// 그냥 사용하면 됩니다.
enum Option<T> {
    None,
    Some(T),
}
  • Rust에는 null 값이 없습니다. 대신 Option 열거형을 사용하여 값의 부재를 표현할 수 있습니다.
  • Option 열거형은 정말 유용하기 때문에 표준 라이브러리에 정의되 어 있으며 Rust에서 기본적으로 사용할 수 있습니다.
let some_number = Some(5);
let some_char = Some('e');

let absent_number: Option<i32> = None;

Option 열거형 변수에 저장된 특정 자료형의 값은 동일한 자료형의 일반 변수와 다르게 취급됩니다. 따라서 아래 코드는 컴파일러에서 에러가 발생시킵니다.

let x: i8 = 5;
let y: Option<i8> = Some(5);

let sum = x + y; // Error 발생!!!
  • x와 y는 실질적으로 5라는 값을 저장하고 있지만 서로의 자료형은 다릅니다. 그렇기 때문에 서로 더하여 sum 변수에 저장될 수 없습니다. 덧셈 연산을 수행하기 위해서는 Option<T>T로 변환해야 합니다. 변환하는 방법은 여러가지가 있는데, 그 중 널리 쓰이는 두 가지 방법은 아래와 같습니다.
// match 문을 이용
let sum = match y {
    Some(value) => x + value,
    None => x,  // y가 None일 경우 x만 반환
// map_or 메소드 이용
let sum = y.map_or(x, |value| x + value);
};
  • 위와 같이 Rust는 null 값이 존재하지 않고 Option 열거형을 활용하여 값의 부재를 표현하며 값이 부재할 시에 대한 예외도 모두 처리하고 있습니다. 값의 부재를 표현할 필요가 없는 경우엔 일상적으로 일반 변수를 사용하면 됩니다. 그러나 값이 존재하지 않을 수 있는 경우가 예상된다면 Option 열거형을 활용하여 값이 존재하지 않는 경우에 대한 예외처리를 꼭 수행해주시기 바랍니다.
profile
Speech to Text를 공부하고 있습니다.

0개의 댓글