comnic's Dev&Life

[Rust] 8. 패턴 매칭(Match)과 매치 구조체(Match Struct) 본문

Rust

[Rust] 8. 패턴 매칭(Match)과 매치 구조체(Match Struct)

comnic 2023. 12. 6. 07:43
반응형

8. 패턴 매칭(Match)과 매치 구조체(Match Struct)

Rust에서 match 키워드를 사용한 패턴 매칭은 다양한 값에 대한 패턴을 정의하고, 해당 패턴에 맞게 코드를 실행할 수 있도록 해줍니다. 매치(match)는 다른 언어의 switch문과 유사하지만 훨씬 강력하며, 다양한 패턴을 사용할 수 있습니다.

 

8.1 match 키워드를 사용한 패턴 매칭

  • match 키워드를 사용하여 값을 여러 경우(case)와 비교합니다. 각 경우에 대해 실행될 코드 블록을 정의합니다.
  • 모든 가능한 경우를 다루는 것이 권장되며, 이를 위해 _ (와일드카드)를 사용하여 나머지 경우를 처리할 수 있습니다.

예제:

fn main() {
    let number = 5;

    match number {
        1 => println!("하나"),
        2 => println!("둘"),
        3 | 4 => println!("셋 또는 넷"), // 3 또는 4에 대한 경우
        5..=10 => println!("다섯에서 열까지"), // 5부터 10까지의 범위
        _ => println!("다른 숫자"), // 나머지 경우
    }
}

 

8.2 매치 구조체

  • 매치(match)를 사용하여 구조체의 내부 값에 접근할 수 있습니다. 이를 매치 구조체(Match Struct)라고 부릅니다.
  • 매치 구조체를 사용하면 더 간결하게 구조체의 필드를 분해하고 활용할 수 있습니다.

예제:

// 구조체 정의
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let my_point = Point { x: 10, y: 20 };

    match my_point {
        Point { x, y } => println!("X 좌표: {}, Y 좌표: {}", x, y),
    }
}

위의 예제에서 match를 사용하여 my_point 구조체를 분해하고, 각각의 필드 x와 y에 접근하여 값을 출력합니다.

패턴 매칭은 Rust에서 다양한 상황에서 유용하게 사용됩니다. 예를 들어, 열거형(Enum)과 함께 사용하면 강력한 도구로 활용될 수 있으며, 실제 많이 사용하고 있어 아래와 같이 내용을 추가 합니다.

 

8.3 열거형(Enum)과 패턴 매칭의 예제

열거형과 패턴 매칭을 함께 사용하는 것은 Rust에서 코드를 깔끔하게 작성하고 가독성을 높이는 중요한 기술 중 하나입니다. 아래 예제에서는 간단한 열거형과 이를 활용한 패턴 매칭에 대해 설명합니다.

8.3.1 예제에서 사용할 열거형(Enum) 정의

간단한 컴퍼스(Compass) 열거형을 정의합니다. 이 열거형은 방향을 나타내는 네 가지 경우를 가집니다.

enum Compass {
    North,
    South,
    East,
    West,
}

 

8.3.2 열거형과 패턴 매칭

열거형을 사용하여 방향을 나타내고, match 키워드를 통해 각 방향에 대한 처리를 정의합니다.

enum Compass {
    North,
    South,
    East,
    West,
}

fn print_direction(direction: Compass) {
    match direction {
        Compass::North => println!("북쪽"),
        Compass::South => println!("남쪽"),
        Compass::East => println!("동쪽"),
        Compass::West => println!("서쪽"),
    }
}

fn main() {
    let current_direction = Compass::East;
    print_direction(current_direction);
}
  • Compass 열거형은 네 가지 방향을 표현합니다.
  • print_direction 함수는 match를 사용하여 전달된 방향에 대한 처리를 정의합니다.
  • main 함수에서 Compass::East를 가지는 열거형 인스턴스를 생성하고, 이를 print_direction 함수에 전달하여 방향을 출력합니다.

 

8.3.3 연관된 값이 있는 열거형과 패턴 매칭

열거형의 각 case에 연관된 값을 추가하고, 패턴 매칭에서 이 값을 활용합니다.

enum Temperature {
    Celsius(i32),
    Fahrenheit(i32),
}

fn print_temperature(temp: Temperature) {
    match temp {
        Temperature::Celsius(degrees) => println!("섭씨 {}도", degrees),
        Temperature::Fahrenheit(degrees) => println!("화씨 {}도", degrees),
    }
}

fn main() {
    let current_temp_c = Temperature::Celsius(25);
    let current_temp_f = Temperature::Fahrenheit(77);

    print_temperature(current_temp_c);
    print_temperature(current_temp_f);
}
  • Temperature 열거형은 각각 Celsius와 Fahrenheit라는 case를 가지며, 각 case에는 온도를 나타내는 i32 타입의 값이 연관되어 있습니다.
  • print_temperature 함수에서는 패턴 매칭을 사용하여 온도와 단위를 출력합니다.
  • main 함수에서는 두 가지 다른 온도를 생성하여 출력합니다.

이러한 예제를 통해 열거형과 패턴 매칭을 조합하여 다양한 상황에 유연하게 대응할 수 있는 Rust의 강력한 기능을 이해할 수 있습니다.

반응형
Comments