패턴은 enum 전용이 아니야 — 데이터를 분해하는 언어 전역 미니 문법이야. 이미 let 이랑 match 에서 썼지; 여기 더 완전한 도구함이 있어.
구조분해
패턴은 데이터의 모양을 거울처럼 따라 조각을 꺼낼 수 있어: 튜플 (x, y), struct Point { x, y }, enum variant Some(n) 을 구조분해해. 패턴의 구조가 값의 구조에 맞고, 네가 쓴 이름들이 안쪽 조각들로의 바인딩이 돼.
와일드카드, 대안, 범위
_ 는 단일 값을 매칭하고 무시; .. 는 struct 나 튜플의 나머지를 무시해. or-패턴 1 | 2 | 3 은 한 arm 에서 여러 값 중 아무거나 매칭. 범위 패턴 1..=5 는 그 포함 범위 안 아무거나 매칭. 같이 쓰면 한 arm 이 if 사슬 없이 풍부한 조건을 표현해.
match 가드가 런타임 조건을 더해. 패턴 뒤의
if — Some(n) if n > 0 => ... — 는 패턴이 맞고 AND 가드가 참일 때만 arm 을 가져. 가드는 패턴이 모양만으로 표현 못 하는 조건을 표현하게 해.@ 로 바인딩
@ 연산자는 값을 이름에 바인딩 하면서 동시에 패턴에 검사해: id @ 1..=9 => ... 는 id 가 1–9 인지 확인하고 arm 에서 쓰게 id 로 바인딩해. '검사랑 값 둘 다 필요해' 의 도구야.
왜 중요하냐
Rust 는 다른 언어가 if-else 사슬에 기대는 만큼 패턴 매칭에 기대. 패턴을 마스터하는 게 관용적 Rust 를 깔끔하게 읽히게 만들어: 복잡한 경우 분석이 중첩 조건문 대신 평평하고 망라적인 match 가 돼.