Menu
Coddy logo textTech

'Result'와 함께 'match' 사용하기

Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 43번째.

이제 Result가 무엇인지 이해했으므로, 성공과 실패 사례를 모두 처리하는 가장 명시적이고 강력한 방법인 match 표현식을 사용하는 법을 배워보겠습니다.

Option과 마찬가지로, matchResult의 두 가지 변형(variant)을 모두 처리하도록 강제합니다. 성공을 처리하기 위해 Ok에 대한 팔(arm)을 하나 만들고, 실패를 처리하기 위해 Err에 대한 또 다른 팔을 만듭니다:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

ResultOk일 때, match는 성공한 값을 추출하고 첫 번째 분기를 실행합니다. Err일 때는 에러 정보를 추출하고 두 번째 분기를 실행합니다. 이 패턴은 잠재적인 에러를 실수로 무시하지 않도록 보장합니다.

challenge icon

챌린지

쉬움

두 개의 입력을 받게 됩니다. 첫 번째 입력은 숫자(문자열 형태)이고, 두 번째 입력도 숫자(문자열 형태)입니다. 첫 번째 숫자를 두 번째 숫자로 나누는 시도를 하고 Result<f64, &'static str>를 반환하는 함수를 만드세요. 만약 두 번째 숫자가 0이라면, "Division by zero"라는 메시지와 함께 Err를 반환하세요. 그렇지 않으면 나눗셈 결과와 함께 Ok를 반환하세요. match 표현식을 사용하여 OkErr 케이스를 모두 처리하고 적절한 메시지를 출력하세요.

요구 사항:

  • 첫 번째 입력(피제수)을 읽고 공백을 제거합니다.
  • 첫 번째 입력을 f64로 파싱합니다.
  • 두 번째 입력(제수)을 읽고 공백을 제거합니다.
  • 두 번째 입력을 f64로 파싱합니다.
  • 두 개의 f64 매개변수를 받고 Result<f64, &'static str>를 반환하는 함수를 만듭니다.
  • 함수 내부에서 제수가 0.0인지 확인합니다:
    • 만약 그렇다면, Err("Division by zero")를 반환합니다.
    • 그렇지 않다면, Ok(dividend / divisor)를 반환합니다.
  • 파싱된 두 숫자로 함수를 호출합니다.
  • match 표현식을 사용하여 Result를 처리합니다.
  • Ok(value) 분기에서는 Result: [value]를 출력합니다.
  • Err(error) 분기에서는 Error: [error]를 출력합니다.

입력:

  • 첫 번째 줄: 피제수를 나타내는 숫자 (예: 10.0)
  • 두 번째 줄: 제수를 나타내는 숫자 (예: 2.0)

출력:

  • 나눗셈에 성공한 경우: Result: [result]
  • 0으로 나눈 경우: Error: Division by zero

치트 시트

match를 사용하여 ResultOkErr 변형(variant)을 모두 처리합니다:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

match 표현식은 성공과 실패 사례를 모두 처리하도록 강제합니다. ResultOk인 경우, 성공한 값을 추출하여 첫 번째 팔(arm)을 실행합니다. Err인 경우, 에러 정보를 추출하여 두 번째 팔을 실행합니다.

직접 해보기

use std::io;

// TODO: Result<f64, &'static str>를 반환하는 divide 함수를 여기에 작성하세요


fn main() {
    // 첫 번째 입력 읽기 (피제수)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // 두 번째 입력 읽기 (제수)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: divide 함수를 호출하고 match를 사용하여 Result를 처리하세요
    // Ok 케이스의 경우 "Result: [value]"를 출력하세요
    // Err 케이스의 경우 "Error: [error]"를 출력하세요
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨