🔀

Enum, Option, Result — Rust의 대수적 데이터 타입

null 없는 세계를 만드는 타입 시스템

C/Java의 enum은 정수 상수의 나열이다. Rust의 enum은 각 variant가 다른 타입의 데이터를 담을 수 있다. 이걸 대수적 데이터 타입(ADT)이라고 한다.

enum Shape {
    Circle(f64),           // 반지름
    Rectangle(f64, f64),   // 가로, 세로
    Triangle { base: f64, height: f64 },
}

Option과 Result는 이 enum의 활용 사례다.

Option<T> = Some(T) | None. null 대신 쓴다. 값이 없을 수 있는 곳에 Option을 쓰면 컴파일러가 None 처리를 강제한다. NullPointerException 같은 건 원천 차단.

Result<T, E> = Ok(T) | Err(E). 예외 대신 쓴다. 앞에서 다룬 에러 처리의 기반.

이 두 타입이 Rust 코드의 거의 모든 곳에 나온다. 이걸 자연스럽게 다루는 게 Rust에 익숙해지는 핵심이다.

핵심 포인트

1

enum은 variant별로 다른 데이터를 담을 수 있다

2

Option<T>으로 null을 대체 — None 처리를 컴파일러가 강제

3

Result<T, E>로 예외를 대체 — 에러가 타입에 명시

4

match로 모든 variant를 exhaustive하게 처리

장점

  • null/exception 런타임 에러 원천 차단
  • match의 exhaustive 검사로 누락 없는 분기

단점

  • Option/Result를 풀어야 하는 보일러플레이트가 있다

사용 사례

DB 조회 — find_by_id()가 Option<User>를 반환 상태 머신 — enum variant가 각 상태를 표현