패턴과 매칭
패턴과 매칭 (Patterns and Matching)
이번 장에서는 패턴을 쓸 수 있는 위치부터, 반박 가능한(refutable) 패턴과 반박 불가능한(irrefutable) 패턴의 차이, 그리고 자주 마주치게 될 다양한 패턴 문법까지 차근차근 짚어 볼게요.
출처: Rust 공식문서
본문
패턴은 Rust에서 타입이 가진 구조를 맞춰 보는 데 쓰는 특별한 문법이에요. 단순한 타입이든 복잡한 타입이든 그 구조를 상대로 값을 대조할 수 있죠. 여기에 match 표현식 같은 다른 구성 요소를 함께 쓰면 프로그램의 제어 흐름을 훨씬 세밀하게 다룰 수 있어요. 패턴은 다음 요소들의 조합으로 이루어져 있어요:
- 리터럴(Literals)
- 해체(destructure)된 배열, 열거형, 구조체, 또는 튜플
- 변수
- 와일드카드(Wildcards)
- 플레이스홀더(Placeholders)
몇 가지 예를 들면 x, (a, 3), Some(Color::Red) 같은 게 패턴이에요. 패턴이 유효한 자리에서는 이런 구성 요소들이 데이터의 모양(shape)을 표현해요. 프로그램은 값을 패턴과 대조해서, 특정 코드 조각을 계속 실행할 만큼 데이터가 올바른 모양인지를 판단해요.
패턴을 쓰려면 그 패턴을 어떤 값과 비교하면 돼요. 패턴이 값과 일치하면 그 값의 각 부분을 코드에서 사용할 수 있어요. 6장에서 본 match 표현식을 떠올려 보세요. 동전 분류 기계 예시가 바로 패턴을 쓴 경우였죠. 값이 패턴의 모양에 맞으면 이름 붙인 조각들을 그대로 쓰면 되고, 맞지 않으면 그 패턴에 연결된 코드는 실행되지 않아요.
이번 장은 패턴에 관한 모든 것을 정리한 참고 자료(reference)예요. 패턴을 쓸 수 있는 유효한 위치, 반박 가능한 패턴과 반박 불가능한 패턴의 차이, 그리고 자주 보게 될 서로 다른 패턴 문법 종류를 다룰게요. 장을 끝까지 마치면 패턴으로 많은 개념을 명확하게 표현하는 법을 알게 될 거예요.