본문 바로가기
개발/러스트 (Rust)

Rust 기본, 패턴 매칭 표현식 (Match expression)

by 레조 2024. 8. 13.

https://rustacean.net/

 

Rust 기본, 패턴 매칭 표현식 (Match expression)

 

Rust match 표현식은 값의 패턴을 매칭하여 조건에 따라 코드를 실행하는 강력한 제어 흐름 구조입니다.

이는 다른 프로그래밍 언어의 switch-case 구문과 비슷하지만,

더 유연하고 강력한 기능을 제공합니다. 

 

값을 일련의 패턴과 비교하여 어떤 코드 경로를 실행할지 결정할 수 있습니다.

또한 값에 대한 모든 패턴을 제시해야합니다.

부족할 경우 마지막에 모든 경우에 해당하는 '_' 패턴을 사용합니다.

fn main() {
    let age = 5;
    
    // 매치 블록 내부에는 패턴과 일치할 경우 실행할 코드로 구성된 match arms가 나열된다.
    // 패턴은 리터럴 값, 변수 이름, 와일드 카드 등이 될 수 있습니다.
    match age {
        1 => println!("Happy 1st Birthday!"), // literal value
        13..=19 => println!("You are a teenager!"), // 13~19, range of numbers
        x => println!("You are {x} years old!"), // 변수로 나머지 모든 경우를 대체.
        //_ => println!("others") // 나머지 모든 경우
    }
    
    
    let marks = 55u8;
    
    match marks {
        91..=100 => println!("excellent!"),
        71..=90 => println!("good.)"),
        51..=70 => println!("average..."),
        0..=50 =>  println!("You failed."),
        101..=u8::MAX => println!("Invalid marks!!!"),
    }
}

 

열거형 이름이 길면 Operation::Add 대신 Self::Add 사용할 수 있습니다.

#[derive(Debug)]
enum Operation {
    Add(u8, u8),
    Mul(u8, u8),
    Subtract { first: u8, second: u8 },
    Divide { divident: u8, divisor: u8 },
}

impl Operation {
    fn result(&self) -> u8 {
        match self {
            Self::Add(a, b) => a + b, // Operation 대신 Self 사용 가능.
            Self::Mul(a, b) => a * b,
            Self::Subtract { first, second } => first - second,
            Self::Divide { divident, divisor } => divident / divisor,
        }
    }    
}

fn main() {
    let user_operation = Operation::Subtract {
        first: 75,
        second: 20,
    };
    println!("{:?} Result: {}", user_operation, user_operation.result());
}