Rust에서 사용되는 열거형에 대해서 자세하게 공부
Rust에서 열거형은 다음과 같이 사용한다.
enum IpAddr {
V4,
V6,
}
위 코드에서는 V4, V6 두 가지 값 중 하나를 가질 수 있는 IpAddr 이라는 타입을 정의한다.
match를 사용하여 다음과 같이 응용할 수 있다.
enum IpAddr {
V4,
V6,
}
fn main() {
let v4_type = IpAddr::V4;
match v4_type {
IpAddr::V4 => println!("IP v4"),
IpAddr::V6 => println!("IP v6"),
_ => println!("What is this Type..?"),
}
}
결과: IP v4
Rust 표준 라이브러리에는 Option 열거형 타입이 정의되어 있다.
Rust는 다른 프로그래밍 언어와 달리 Null 타입을 지원하지 않고 있는데, 대신에 Option 타입을 활용하여 값(value)이 있는지 없는지를 컴파일 타임에 체크할 수 있다고 한다!
아래 예시를 보자
enum Option<T> {
None,
Some(T),
}
Option 열거형에서 아래 2가지를 핵심 무기로 사용한다.
1. None: 데이터가 없다는 것을 의미한다
2. Some: 데이터가 있다는 것을 의미하는데, Some에 들어갈 데이터 타입을 제네릭 타입 T로 지정한다.
여기서 제네릭 타입이란 임의의 데이터 타입을 받아들일 수 있게 만든 것을 뜻한다.
예를 들면 T
에는 i32
, f64
, string
등이 들어갈 수 있다.
option 열거형을 사용하기 위해서는 다른 열거형과 마찬가지로 Option::None 혹은 Option::Some(값)을 사용한다.
예시
fn main() {
// Option::None 지정
let no_index: Option<i32> = Option::None;
// Option::Some 지정
let index: Option<i32> = Option::Some(1);
// Option:: 생략 표현
let no_index: Option<i32> = None;
let index = Some(1);
println!("{:?}, {:?}", no_index, index);
}
결과: None, Some(1)
Result는 함수의 반환 값으로 사용되며, 함수가 성공적으로 실행되었는지 또는 오류가 발생하였는지를 나타낸다.
Pption
열거형은 None
, Some
을 갖지만 Result
열거형은 Ok
, Err
을 가지고 있다.
Option 열거자가 값이 있다 없다와 관계 있었다면 Result는 제대로 실행 되었나 아니면 에러가 발생 되었나 하는 문제를 다룬다!
예시 코드는 다음과 같다.
fn divide(x: f64, y: f64) -> Result<f64, String> {
if y == 0.0 {
Err("Error 0.0".to_string())
} else {
Ok(x / y)
}
}
fn main() {
match divide(10.0, 2.0) {
Ok(result) => println!("결과 {}", result),
Err(error) => println!("오류 {}", error),
}
}
라인별로 설명하자면
fn diveide(x: f64, y: f64) -> Result<f64, String> {
divide
함수를 생성하고 f64 타입으로 x와 y의 값을 받는다.
성공 시 f64 타입으로 출력하고 실패 시 String 형식으로 출력하게 된다.
if y == 0.0 {
Err("Error 0.0".to_string())
} else {
Ok(x / y)
}
y의 값이 0인 경우 나눗셈이 되지 않기 때문에 y의 값이 0인 경우 Err 출력
fn main() {
match divide(10.0, 2.0) {
Ok(result) => println!("결과 {}", result),
Err(error) => println!("오류 {}", error),
}
}
Result의 값이 Ok인 경우 result에 Ok의 내부 값을 바인딩하고 결과에 대해서 출력한다.
Result의 값이 Err인 경우 error에 error 값을 출력한다.
출처:
> SEORENN COMPLEX LOGS - 러스트의 열거형(Enums) 살펴보기
> 예제로 배우는 Rust 프로그래밍 - 열거형-enum