0Pricing
Learn Rust Coding · 강의

강력한 패턴 매칭

`match` 표현식과 기타 패턴 매칭 구문을 능숙하게 사용하여 데이터 변형을 간결하고 빠짐없이 처리합니다.

강력한 패턴 매칭은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 3개의 강의가 포함되어 있습니다.

패턴 매칭의 힘 발휘하기

Rust의 패턴 매칭 세계에 오신 것을 환영합니다! 이 강력한 기능을 사용하면 데이터의 구조에 따라 프로그램 흐름을 제어할 수 있습니다.

단순히 같은지 확인하는 대신 값을 분해하고, 구성 요소를 추출하며, 데이터 형태에 따라 특정 코드를 실행할 수 있습니다.

  • 강력해진 if/else 또는 switch 문과 비슷합니다.
  • 완전성을 보장하므로 가능한 모든 패턴을 처리해야 합니다.
  • 코드를 더 읽기 쉽고 견고하게 만들어 줍니다.

`match` 표현식 기초

패턴 매칭의 핵심은 match 표현식입니다. 이 표현식은 값을 받아 일련의 패턴과 비교합니다. 일치하는 첫 번째 패턴이 선택됩니다!

match 표현식의 각 '분기'는 패턴과 해당 패턴이 일치할 때 실행할 코드로 구성됩니다.

enum Direction {
  North,
  East,
  South,
  West,
}

fn main() {
  let my_direction = Direction::North;

  match my_direction {
    Direction::North => println!("Going up!"),
    Direction::East => println!("Going right!"),
    Direction::South => println!("Going down!"),
    Direction::West => println!("Going left!"),
  }
}

리터럴과 범위 매칭하기

특정 리터럴 값(숫자, 문자, 불리언)과 매칭하거나 ..=을 사용해 범위를 정의할 수 있습니다. | 연산자를 사용하면 하나의 분기에서 여러 패턴을 매칭할 수 있습니다.

패턴은 순서대로 확인되며 첫 번째로 일치하는 패턴이 사용된다는 점을 기억하세요.

fn main() {
  let x = 7;

  match x {
    1 => println!("It's one!"),
    2 | 3 => println!("It's two or three!"),
    4..=8 => println!("It's between four and eight!"),
    _ => println!("It's something else!"), // Catch-all
  }

  let character = 'b';
  match character {
    'a'..='e' => println!("Early letter"),
    _ => println!("Other letter"),
  }
}

구조체 분해하기

구조체처럼 복잡한 데이터 타입을 분해할 때 패턴 매칭의 진가가 드러납니다. match 분기 안에서 개별 필드를 변수로 직접 추출할 수 있습니다.

따라서 특정 필드 값과 매칭할 때 구조체 데이터에 깔끔하고 간결하게 접근할 수 있습니다.

struct Point {
  x: i32,
  y: i32,
}

fn main() {
  let p = Point { x: 0, y: 7 };

  match p {
    Point { x, y: 0 } => println!("On the X axis at {}", x),
    Point { x: 0, y } => println!("On the Y axis at {}", y),
    Point { x, y } => println!("Not on an axis: ({}, {})", x, y),
  }
}

데이터가 있는 열거형 분해하기

Rust의 열거형은 관련 데이터를 포함할 수 있습니다. 패턴 매칭은 열거형 변형에서 이 데이터를 추출하는 기본 방법입니다.

데이터를 새 변수로 직접 분해할 수 있으므로 각 변형의 내용을 쉽게 다룰 수 있습니다.

enum Message {
  Quit,
  Move { x: i32, y: i32 },
  Write(String),
  ChangeColor(i32, i32, i32),
}

fn process_message(msg: Message) {
  match msg {
    Message::Quit => println!("Quit message."),
    Message::Move { x, y } => {
      println!("Move to x: {}, y: {}", x, y);
    }
    Message::Write(text) => println!("Text message: {}", text),
    Message::ChangeColor(r, g, b) => {
      println!("Color: R:{}, G:{}, B:{}", r, g, b);
    }
  }
}

fn main() {
  process_message(Message::Move { x: 10, y: 20 });
  process_message(Message::Write(String::from("Hello!")));
}

와일드카드 패턴 `_`

특수한 _(밑줄) 패턴은 모든 경우를 처리하는 패턴으로 동작합니다. 어떤 값과도 일치하지만 해당 값에 바인딩되지는 않습니다.

완전성을 위해 모든 가능성을 처리해야 하지만 특정 분기와 일치하는 값 자체에는 관심이 없을 때 유용합니다.

fn main() {
  let some_value = Some(5);
  let absent_value: Option<i32> = None;

  match some_value {
    Some(x) => println!("Got a value: {}", x),
    _ => println!("Something else!"), // Matches None too
  }

  match absent_value {
    Some(x) => println!("Got a value: {}", x),
    _ => println!("No value here!"),
  }
}

단일 패턴에 사용하는 `if let`

때로는 특정 패턴 하나만 매칭하고 나머지는 모두 무시하고 싶을 수 있습니다. 이러한 경우 if let은 전체 match 표현식보다 간결한 대안입니다.

이는 기본적으로 다음과 같은 의미입니다. "이 패턴이 일치하면 이 작업을 하고, 그렇지 않으면 아무 작업도 하지 않습니다(또는 선택적인 else 블록을 실행합니다)."

fn main() {
  let config_max = Some(3u8);
  let none_value: Option<u8> = None;

  if let Some(max) = config_max {
    println!("Max configured to be: {}", max);
  }

  if let Some(val) = none_value {
    println!("This won't print: {}", val);
  } else {
    println!("No value found!");
  }
}

조건부 반복문에 사용하는 `while let`

if let과 비슷하게 while let을 사용하면 패턴이 계속 일치하는 동안 반복할 수 있습니다.

Vec과 같은 컬렉션에서 항목을 처리할 때 매우 유용합니다. 더 이상 일치하는 요소가 없을 때까지 계속할 수 있기 때문입니다(예: pop()이 None을 반환할 때까지).

fn main() {
  let mut stack = vec![1, 2, 3];

  while let Some(top) = stack.pop() {
    println!("Popped: {}", top);
  }

  println!("Stack is empty now.");
}

매치 가드: 조건 추가하기

match 분기에 매치 가드라고 하는 추가 if 조건을 넣을 수 있습니다. 해당 분기가 실행되려면 패턴이 일치하고 가드 조건도 참이어야 합니다.

이를 사용하면 열거형 변형을 더 만들지 않고도 패턴 내부를 더욱 세밀하게 제어할 수 있습니다.

fn main() {
  let num = Some(4);

  match num {
    Some(x) if x % 2 == 0 => println!("Even number: {}", x),
    Some(x) if x < 5 => println!("Small odd number: {}", x),
    Some(x) => println!("Any other number: {}", x),
    None => println!("No number"),
  }
}

패턴 매칭 도전 과제

다음 Rust 코드 조각을 살펴보세요. match 표현식과 그 출력에 관한 다음 설명 중 TRUE인 것은 무엇일까요?

enum Status {
  Loading,
  Success(u32),
  Error(String),
}

fn process_status(s: Status) {
  match s {
    Status::Success(code) if code > 200 => println!("Success with high code: {}", code),
    Status::Success(code) => println!("Success with code: {}", code),
    Status::Error(msg) => println!("Failed: {}", msg),
    _ => println!("Status unknown or loading..."),
  }
}

fn main() {
  process_status(Status::Success(201));
  process_status(Status::Error(String::from("Network issue")));
  process_status(Status::Loading);
  process_status(Status::Success(200));
}

복습: 패턴 완전히 익히기

Rust 패턴 매칭의 놀라운 힘을 살펴보았습니다! 패턴 매칭은 명확하고 간결하며 안전한 코드를 작성하기 위한 기본 개념입니다.

  • match 표현식은 데이터 구조에 따른 완전한 흐름 제어를 제공합니다.
  • 리터럴, 범위, 와일드카드(_)를 사용해 매칭할 수 있습니다.
  • 분해를 사용하면 구조체와 열거형에서 값을 직접 추출할 수 있습니다.
  • if let과 while let은 단일 패턴을 간결하게 매칭하는 방법을 제공합니다.
  • 매치 가드는 match 분기에 조건부 로직을 추가합니다.

이러한 패턴을 계속 연습하세요. 관용적인 Rust 코드를 작성하는 데 꼭 필요합니다!

자주 묻는 질문

“강력한 패턴 매칭” 강의는 무료인가요?

네 — “강력한 패턴 매칭” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 3개의 강의가 포함되어 있습니다.

“강력한 패턴 매칭”에서 뭘 배우나요?

`match` 표현식과 기타 패턴 매칭 구문을 능숙하게 사용하여 데이터 변형을 간결하고 빠짐없이 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.

“강력한 패턴 매칭” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 구조체 정의와 사용
  2. 사용자 정의 형식을 위한 열거형
  3. 강력한 패턴 매칭
← Learn Rust Coding(으)로 돌아가기