코드를 작성할 때 구조체보다 간결하게 사용할 수 있는 열거형에 대해 알아보겠습니다.
IP 주소는 v4와 v6가 존재합니다.
이를 열거형으로 표현해보겠습니다.
enum IpAddrKind {
V4,
V6,
}
사용은 다음과 같이 가능합니다.
let four = IpAddrKind::V4;
let six = IpAddrKind::V6;
IpAddrKind라는 enum은 데이터 타입으로서 함수의 인자로도 쓰일 수 있습니다.
fn route(ip_type: IpAddrKind) { }
route(IpAddrKind::V4);
route(IpAddrKind::V6);
열거형에는 데이터 또한 포함할 수 있습니다.
enum IpAddr {
V4(String),
V6(String),
}
let home = IpAddr::V4(String::from("127.0.0.1"));
let loopback = IpAddr::V6(String::from("::1"));
String을 포함할 수 있듯이 열거형에는 구조체, u32 i32 등의 데이터 타입을 포함할 수 있습니다.
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
Move는 익명 구조체, Write는 문자열 ChangeColor는 세 개의 정수를 받고 있습니다. 이처럼 다양한 데이터 타입을 가질 수 있습니다.
impl Message {
fn call(&self) {
// 메소드 내용은 여기 정의할 수 있습니다.
}
}
let m = Message::Write(String::from("hello"));
m.call();
구조체와 비슷하게 열거형도 메소드를 가질 수 있습니다.
'Rust' 카테고리의 다른 글
[Rust] Option 과 Result (0) | 2022.04.25 |
---|---|
[Rust] match 흐름 제어 연산자 (0) | 2022.04.24 |
[Rust] 구조체의 메소드 (0) | 2022.04.22 |
[Rust] 참조자(References) 와 빌림(Borrowing) (0) | 2022.04.21 |
[Rust] 소유권(Ownership) (0) | 2022.04.19 |