강좌12-Enum

1 분 소요

Enum

기본 기능은 다른 언어의 Enum과 유사합니다. 다만, 구조체와 같이 implement로 확장이 가능하며, Nullable 변수를 선언할 때 사용하는 등 활용도가 더 넓습니다.

간단히 예제를 통해 알아보도록 하겠습니다.

enum Language {
  KOREAN,
  ENGLISH
}

fn main() {
  let default_lang = Language::KOREAN;
}

구조체 담기

enum Language {
    KOREAN(String),
    ENGLISH(String)
}

fn main() {
  let default_lang = Language::KOREAN(String::from("Korea"));
}

Tuple 담기

enum Language {
    KOREAN(String, i32),
    ENGLISH(String, i32)
}

fn main() {
  let default_lang = Language::KOREAN(String::from("Korea"), 82);
}

여러 모델 담기

enum Book {
  UNKNOWN,
  WRITE { country: String, code: u32 },
  READ (String),
  PICTURE (i32)
  
}

impl 사용 가능

impl Book {
  fn Buy(&self) {
  
  }
}

Option

Null을 가질 수 있는 변수를 선언할 때 사용합니다.
enum형으로 되어 있으며, 값이 있을 때는 Some 없을 때는 None을 사용합니다.

enum Option<T> {
    Some(T),
    None,
}

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

다른언어의 nullable 변수와 마찬가지로 일반 변수와 연산을 할 수 없습니다.

따라서, 에러가 발생함을 확인할 수 있습니다.

fn main() {
  let x = 10;
  let y = Some(10);
  let sum = x + y;
}

//결과
  |
4 | let sum = x + y;
  |                    ^ no implementation for `i8 + std::option::Option<i8>`
  |
   = help: the trait `std::ops::Add<std::option::Option<i8>>` is not implemented for `i8`

댓글남기기