[Rust/러스트] 열거형(enum) 정리

2022. 2. 20. 14:43Programming Language/Rust

반응형

■ 열거형

열거형은 하나의 타입이 가질 수 있는 값들을 다양하게 열거함으로써 타입을 정의할 수 있습니다. 열거형의 항목은 다양한 타입으로 설정할 수 있으며, 열거형은 구조체와 같이 메소드와 연관함수를 구현할 수 있습니다.


◆ 다양한 타입으로 설정

Info 열거형의 항목을 다양하게 String, u32, 구조체, 열거형으로 정의함으로써 열거형의 특징을 확인할 수 있습니다.

#[derive(Debug)]
enum Gender{
    Male,
    Female,
}

#[derive(Debug)]
enum Info{
    // String 타입
    Name(String),
    // u32 타입
    Age(u32),
    // 구조체
    Location{x : i32, y : i32},
    // 열거형
    Gender(Gender)
}
fn main(){
    let name = Info::Name(String::from("Hyunmin han"));
    let age = Info::Age(29);
    let location = Info::Location{ x : 132, y : 80};
    let gender = Info::Gender(Gender::Male);
    
    println!("Name : {:?}", name);
    println!("Age : {:?}", age);
    println!("Location : {:?}", location);
    println!("Gender : {:?}", gender);
}

▶ 출력 결과

Name : Name("Hyunmin han")
Age : Age(29)
Location : Location { x: 132, y: 80 }
Gender : Gender(Male)

◆ 메소드와 연관함수 활용

Info 열거형의 impl(구현부)를 통해 show 메소드와 new_name 연관함수를 구현함으로써, 열거형의 메소드와 연관함수 활용법을 확인할 수 있습니다.

#[derive(Debug)]
enum Info{
    Name(String),
}

impl Info{
    // 메소드 정의
    fn show(&self){
        println!("{:?}", self);
    }

    // 연관 함수 정의
    fn new_name(s : String) -> Info {
        Info::Name(s)
    }
}
fn main(){
    // 연관 함수 호출
    let name  = Info::new_name(String::from("Hyunmin han"));

    // 메소드 호출
    name.show();
}

▶ 출력 결과

Name("Hyunmin han")
반응형