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의 강력한 기능을 이해할 수 있습니다.
반응형