🎯
패턴 매칭 — match와 if let으로 분기하기
switch/case의 상위 호환, Rust 코드의 핵심 표현 방식
C/Java의 switch-case는 값을 비교만 한다. Rust의 match는 값을 분해(destructure)하면서 동시에 분기한다.
match some_option {
Some(value) => println!("got {value}"),
None => println!("nothing"),
}
Some 안의 값을 꺼내면서 분기가 동시에 일어난다. 그리고 컴파일러가 모든 경우를 처리했는지 검사한다. case를 하나라도 빼먹으면 컴파일이 안 된다.
if let은 match의 축약형이다. 한 가지 패턴만 관심 있을 때 쓴다:
if let Some(value) = some_option {
println!("got {value}");
}
enum, 튜플, 구조체, 참조 — Rust의 거의 모든 타입을 패턴으로 분해할 수 있다.
핵심 포인트
1
match 식에 값을 넣으면 각 arm의 패턴과 순서대로 매칭
2
패턴이 값을 분해(destructure)하면서 변수에 바인딩
3
exhaustive — 모든 가능한 경우를 빠짐없이 처리해야 컴파일 통과
4
_ (와일드카드)로 나머지 경우를 한 번에 처리 가능
장점
- ✓ 빠뜨린 케이스를 컴파일러가 잡아준다
- ✓ 값 비교 + 분해 + 바인딩이 한 번에
단점
- ✗ 깊은 중첩 패턴은 가독성이 떨어질 수 있다
사용 사례
Result/Option 처리 — 성공/실패, 있음/없음을 명시적으로 분기
enum 기반 상태 머신 — 각 상태별 동작을 패턴으로 정의