[Rust/러스트] 패턴 매칭(match, if let) 정리
2022. 2. 21. 09:00ㆍProgramming Language/Rust
반응형
■ 패턴 매칭
패턴 매칭에는 match 연산자와 if let 문법이 있습니다.
match 연산자는 다양한 조건을 처리할 때 주로 사용되며, if let 문법은 간결한 흐름을 통해 하나의 패턴만 매칭시키고 나머지는 무시하고 싶을 때 사용됩니다.
◆ match
match는 리터럴 값, 변수명 등 다양한 패턴으로 구성될 수 있습니다.
Java, Go 등에서 자주 사용되는 switch 문법과 유사한 기능을 제공합니다.
match의 패턴은 조건이 될 수 있는 모든 항목을 정의해야 합니다. 만약 패턴 조건에서 무시해도 되는 항목에 경우 변경자(_)를 통해 일괄적으로 무시할 수 있습니다.
1) 반환값이 없는 match
#[derive(Debug)]
enum Gender{
Male,
Female,
}
#[derive(Debug)]
enum Info{
Name(String),
Age(u32),
Location{x : i32, y : i32},
Gender(Gender)
}
fn show_info(info : Info) {
match info {
Info::Name(s) => println!("Name: {}", s),
Info::Age(u) => println!("Age : {}", u),
Info::Location{x, y} => println!("Location x : {}, y : {}", x, y),
Info::Gender(gender) => println!("Gender : {:?}", gender)
}
}
fn main(){
show_info(Info::Name(String::from("Hyunmin Han")));
show_info(Info::Age(29));
show_info(Info::Location{x : 130, y : 80});
show_info(Info::Gender(Gender::Male));
}
▶ 출력 결과
Name: Hyunmin Han
Age : 29
Location x : 130, y : 80
Gender : Male
2) 반환값이 있는 match
#[derive(Debug)]
enum Gender{
Male,
Female,
}
#[derive(Debug)]
enum Info{
Name(String),
Age(u32),
Location{x : i32, y : i32},
Gender(Gender)
}
fn show_info(info : Info) -> String {
match info {
Info::Name(s) => {
println!("Name: {}", s);
String::from("Name")
},
Info::Age(u) => {
println!("Age : {}", u);
String::from("Age")
},
Info::Location{x, y} => {
println!("Location x : {}, y : {}", x, y);
String::from("Location")
},
Info::Gender(gender) => {
println!("Gender : {:?}", gender);
String::from("Gender")
}
}
}
fn main(){
let s = show_info(Info::Name(String::from("Hyunmin Han")));
println!("Select Info : {}\n", s);
let s = show_info(Info::Age(29));
println!("Select Info : {}\n", s);
let s = show_info(Info::Location{x : 130, y : 80});
println!("Select Info : {}\n", s);
let s = show_info(Info::Gender(Gender::Male));
println!("Select Info : {}\n", s);
}
▶ 출력 결과
Name: Hyunmin Han
Select Info : Name
Age : 29
Select Info : Age
Location x : 130, y : 80
Select Info : Location
Gender : Male
Select Info : Gender
3) ( _ ) 변경자 활용
#[derive(Debug)]
enum Gender{
Male,
Female,
}
#[derive(Debug)]
enum Info{
Name(String),
Age(u32),
Location{x : i32, y : i32},
Gender(Gender)
}
fn show_info(info : Info) {
match info {
Info::Name(s) => println!("Name: {}", s),
_ => println!("Something")
}
}
fn main(){
show_info(Info::Name(String::from("Hyunmin Han")));
show_info(Info::Age(29));
show_info(Info::Location{x : 130, y : 80});
show_info(Info::Gender(Gender::Male));
}
▶ 출력 결과
Name: Hyunmin Han
Something
Something
Something
◆ if let
if let은 match 와 달리 하나의 패턴만 매칭시키고, 나머지 패턴은 무시하고 싶을 때 주로 사용됩니다.
#[derive(Debug)]
enum Info{
Name(String),
Age(u32),
}
fn show_name(info : Info) -> String {
if let Info::Name(name) = info{
name
}else{
String::from("Something")
}
}
fn main(){
// if let 조건 예시 데이터 셋팅
let s = show_name(Info::Name(String::from("Hyunmin Han")));
println!("Name : {}", s);
// else 조건 예시 데이터 셋팅
let s = show_name(Info::Age(29));
println!("Name : {}", s);
}
▶ 출력 결과
Name : Hyunmin Han
Name : Something
반응형
'Programming Language > Rust' 카테고리의 다른 글
[Rust/러스트] 스트링 다루기 (0) | 2022.02.21 |
---|---|
[Rust/러스트] 벡터 다루기 (0) | 2022.02.21 |
[Rust/러스트] 열거형(enum) 정리 (0) | 2022.02.20 |
[Rust/러스트] 구조체의 메소드, 연관함수 (0) | 2022.02.17 |
[Rust/러스트] 구조체(struct) 정리 (0) | 2022.02.17 |