매칭 가드와 바인딩
조건을 추가하고 값을 추출해 보세요.
매칭 가드와 바인딩은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
match 가드란 무엇인가요?
match 가드는 match 분기에 추가하는 if 조건입니다. 패턴이 일치하고 동시에 조건이 참일 때만 해당 분기가 실행됩니다.
데이터에 따라 하나의 variant를 더 세부적인 경우로 나눌 수 있습니다.
match number {
Some(n) if n > 0 => println!("positive"),
Some(n) => println!("zero or negative"),
None => println!("no number"),
}가드 문법
패턴을 작성한 다음 if condition, 그다음 =>를 작성합니다. 조건에서는 패턴으로 바인딩한 모든 변수를 사용할 수 있습니다.
가드가 거짓이면 Rust는 다음 분기를 시도합니다.
fn main() {
let n = 4;
match n {
x if x % 2 == 0 => println!("even"),
_ => println!("odd"),
}
}enum 데이터와 함께 사용하는 가드
가드는 데이터를 담는 enum과 함께 사용할 때 가장 유용합니다. 내부 값을 바인딩한 다음 검사합니다.
여기서는 양의 잔액과 음의 잔액에 서로 다른 메시지를 표시합니다. 두 값은 같은 variant이지만 결과는 다릅니다.
enum Account {
Balance(i32),
Closed,
}
fn main() {
let a = Account::Balance(-5);
match a {
Account::Balance(b) if b < 0 => println!("overdrawn"),
Account::Balance(b) => println!("balance {}", b),
Account::Closed => println!("closed"),
}
}순서는 여전히 중요합니다
분기는 위에서 아래 순서로 시도되므로, 더 구체적인 가드 분기를 일반적인 분기보다 앞에 배치하세요.
일반적인 Balance(b) 분기가 먼저 나오면 모든 값과 일치하므로 가드 분기는 실행되지 않습니다.
리터럴 값 매칭
가드 없이 패턴에서 특정 리터럴과 직접 매칭할 수도 있습니다.
여기서는 0과 1을 정확히 매칭하고, 나머지는 _가 처리합니다.
fn main() {
let n = 1;
match n {
0 => println!("zero"),
1 => println!("one"),
_ => println!("many"),
}
}범위 매칭
..=를 사용하면 값의 범위와 매칭할 수 있으며, 양 끝값이 모두 포함됩니다.
여러 비교 가드 대신 사용할 수 있는 깔끔한 방법입니다.
fn main() {
let score = 85;
match score {
0..=59 => println!("fail"),
60..=100 => println!("pass"),
_ => println!("out of range"),
}
}@ 연산자로 바인딩하기
@ 연산자를 사용하면 값을 패턴과 검사하면서 동시에 이름에 바인딩할 수 있습니다.
여기서 id @ 1..=5는 범위를 확인하고 실제 값을 id에 저장하므로 출력할 수 있습니다.
fn main() {
let n = 3;
match n {
id @ 1..=5 => println!("small id {}", id),
other => println!("other {}", other),
}
}전체 값 바인딩하기
위의 other와 같이 패턴에 일반 이름을 사용하면 전체 값이 바인딩됩니다. 이는 여전히 사용할 수 있는 모든 값에 대한 대체 패턴처럼 동작합니다.
값을 무시하려면 _를 사용하고, 값이 필요하면 이름을 사용하세요.
fn main() {
let n = 99;
match n {
0 => println!("zero"),
value => println!("got {}", value),
}
}가드와 바인딩 함께 사용하기
정밀하게 제어하려면 바인딩과 가드를 함께 사용할 수 있습니다. 데이터를 바인딩한 다음 조건을 추가하세요.
이 프로그램은 큰 짝수 잔액을 특별히 표시합니다.
enum Account {
Balance(i32),
}
fn main() {
let a = Account::Balance(200);
match a {
Account::Balance(b) if b > 100 && b % 2 == 0 => println!("big even {}", b),
Account::Balance(b) => println!("normal {}", b),
}
}여러 패턴에 가드 적용하기
분기에서 |로 여러 패턴을 결합하더라도 가드는 분기 전체에 적용됩니다.
나열된 패턴 중 하나라도 일치한 후에 조건을 검사합니다.
fn main() {
let n = 6;
match n {
2 | 4 | 6 if n > 3 => println!("big even"),
_ => println!("other"),
}
}종합하기
이 최종 프로그램은 데이터를 가진 variant, 바인딩, 가드, 모든 경우를 처리하는 대체 패턴을 결합해 온도 값을 분류합니다.
값을 바꾸고 다시 실행해 서로 다른 분기가 실행되는 것을 확인해 보세요.
enum Reading {
Temp(i32),
Missing,
}
fn main() {
let r = Reading::Temp(38);
match r {
Reading::Temp(t) if t >= 38 => println!("fever: {}", t),
Reading::Temp(t) => println!("normal: {}", t),
Reading::Missing => println!("no reading"),
}
}빠른 확인
가드와 바인딩에 대한 이해도를 확인해 보세요.
복습
가드(pattern if condition)로 매칭을 세밀하게 조정하고, 리터럴과 범위(..=)를 매칭하며, 이름이나 @ 연산자로 바인딩을 만드는 방법을 배웠습니다.
이전 내용과 결합하면 이제 고정된 상태 집합을 모델링하고, 각 상태에 데이터를 연결하며, 각각의 경우에 정확히 대응할 수 있습니다. enum과 match를 잘 익히셨습니다!
자주 묻는 질문
“매칭 가드와 바인딩” 강의는 무료인가요?
네 — “매칭 가드와 바인딩” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
“매칭 가드와 바인딩”에서 뭘 배우나요?
조건을 추가하고 값을 추출해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“매칭 가드와 바인딩” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 첫 열거형 정의하기
- 열거형 변형에 따라 매칭하기
- 데이터를 담은 열거형
- 매칭 가드와 바인딩