본문 바로가기

Rust

[Rust] enum 열거형

코드를 작성할 때 구조체보다 간결하게 사용할 수 있는 열거형에 대해 알아보겠습니다. 

 

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