struct 는 '이것들 한꺼번에 다' 라고 말해. enum 은 '이것들 중 정확히 하나' 라고 말해. 그 뒤집기 — AND 에서 OR 로 — 가 관용적 Rust 의 핵심인 데이터 모델링 방식을 열어.
데이터 있거나 없는 variant
enum 은 이름 붙은 variant 들을 나열해. enum 값은 한 번에 한 variant 야. Rust enum 을 강력하게 만드는 비결: 각 variant 가 자기 모양의 자기 데이터를 실을 수 있어. 한 variant 는 비고, 다른 건 튜플을 들고, 또 다른 건 struct 같은 필드 묶음을 들고 — 다 한 타입 아래.
왜 sum type 이라 부르냐
struct 는 'product type' 이야 — 가능한 값 집합이 필드들 가능성의 곱이거든. enum 은 'sum type' 이야 — 가능한 값이 variant 들의 합. 학술적인 게 아니야: 진짜로 여럿-중-하나인 값을 모델링하는 도구야, Quit 이거나, 좌표 든 Move 거나, 문자열 든 Text 인 메시지처럼.
enum 은 illegal state 를 표현 불가능하게 만들어. 값이 진짜 세 상태 중 하나만 될 수 있으면, variant 셋짜리 enum 은 네 번째 유효하지 않은 상태를 말 그대로 만들 수 없게 해. 타입 시스템이 이미 금지한 경우를 위한 방어 검사를 그만 쓰게 돼.
enum 도 메서드를 가져
struct 처럼 enum 도 메서드 있는 impl 블록을 가질 수 있어. enum 메서드는 보통 variant 마다 다른 걸 하려고 match self 로 시작해 — 바로 다음 레슨들이 향하는 곳이야.