이번 편의 목표: 정상과 연체를 한 타입의 두 갈래로 나타내고, match로 빠짐없이 처리합니다.
enum의 각 갈래는 다른 데이터를 가질 수 있습니다. Ready는 추가 데이터가 없고, Overdue는 연체 일수를 가집니다. match는 갈래를 모두 적어야 컴파일됩니다. 하나라도 빠지면 오류입니다.
enum Status {
Ready,
Overdue(i32),
}
fn label(status: &Status) -> String {
match status {
Status::Ready => String::from("정상"),
Status::Overdue(days) => format!("{days}일 연체"),
}
}
fn main() {
let status = Status::Overdue(3);
println!("{}", label(&status));
}출력은 3일 연체입니다. format!은 println!과 같은 자리표시로 String을 만듭니다. Status를 참조로 넘기면 소유권이 label로 옮겨가지 않아, 호출 뒤에도 status를 쓸 수 있습니다.
값이 없을 수 있는 자리는 Option을 씁니다. Some(값)과 None 두 갈래입니다. 연체 일수를 아직 모르면 None, 알면 Some(days)입니다. null 대신 이 타입을 쓰면, 없는 값을 꺼내기 전에 match나 if let Some(days) = days로 갈래를 나누게 됩니다.
직접 해 보기
status를 Status::Ready로 바꿔 출력이 정상인지 확인하세요.
해설
Ready 갈래는 추가 숫자가 없습니다. label의 첫 갈래가 정상입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.