Menu
CoddyTech

단축 방법: unwrap과 expect

Coddy Rust 여정의 논리와 흐름 섹션에 포함된 레슨. 66개 중 45번째.

이미 Option에서 .unwrap()과 .expect()를 배웠으며, 이 메서드들은 Result에서도 작동합니다. 하지만 성공과 실패 사례를 처리할 때 동작 방식이 약간 다릅니다.

.unwrap() 메서드는 Ok 변형에서 값을 추출하지만, Result가 Err이면 프로그램이 패닉을 일으키고 충돌합니다. 마찬가지로 .expect()도 같은 동작을 하지만, 디버깅을 더 쉽게 해 주는 사용자 지정 패닉 메시지를 지정할 수 있습니다.

let success: Result = Ok(42);
let value = success.expect("This should work!");
println!("Value: {}", value); // 출력: Value: 42

// 이 코드는 사용자 지정 메시지를 표시하며 패닉을 일으킵니다:
// let failure: Result = Err("Something went wrong");
// let value = failure.expect("This should work!"); // 패닉 발생!

이러한 메서드를 사용하면 성공한 값에 빠르게 접근할 수 있지만, 신중하게 사용해야 합니다. 작업이 성공할 것이라고 확신할 때나 개발 및 테스트 중에 사용하는 것이 가장 적절합니다.

challenge icon

챌린지

쉬움

두 개의 입력을 받습니다. 첫 번째 입력은 숫자(문자열 형태)이고, 두 번째 입력은 상태 표시자(ok 또는 error)입니다. 상태에 따라 Result<i32, &'static str>를 만드세요. 상태가 ok이면 파싱한 숫자를 포함하는 Ok를 만드세요. 상태가 error이면 "Invalid operation" 메시지가 포함된 Err를 만드세요. 사용자 지정 메시지와 함께 .expect()를 사용해 Result에서 값을 추출하고 출력하세요.

요구 사항:

  • 첫 번째 입력(숫자)을 읽고 공백을 제거하세요
  • 첫 번째 입력을 i32로 파싱하세요
  • 두 번째 입력(상태)을 읽고 공백을 제거하세요
  • Result<i32, &'static str> 변수를 만드세요:
    • 상태가 ok이면 Ok(parsed_number)를 할당하세요
    • 상태가 error이면 Err("Invalid operation")을 할당하세요
  • .expect("Failed to get value")를 사용해 Result에서 값을 추출하세요
  • 추출한 값을 Value: [value] 형식으로 출력하세요

입력:

  • 첫 번째 줄: 숫자(예: 75)
  • 두 번째 줄: ok 또는 error

출력:

  • 상태가 ok인 경우: Value: [number]
  • 상태가 error인 경우: 프로그램이 사용자 지정 메시지와 함께 패닉을 일으킵니다(이 챌린지에서는 테스트하지 않음).

참고: 이 챌린지의 테스트 사례는 성공적으로 실행되는지 확인하기 위해 ok 상태만 사용합니다. error인 경우 패닉이 발생하며, 이는 Err를 만났을 때 .expect()가 보이는 예상 동작입니다.

직접 해보기

use std::io;

fn main() {
    // 첫 번째 입력(number)을 읽습니다
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // 숫자를 i32로 파싱합니다
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // 두 번째 입력(status)을 읽습니다
    let mut status = String::new();
    io::stdin().read_line(&mut status).expect("Failed to read line");
    let status = status.trim();
    
    // TODO: 아래에 코드를 작성하세요
    // status에 따라 Result<i32, &'static str>을 생성합니다
    // .expect()를 사용해 값을 추출합니다
    // 결과를 Value: [value] 형식으로 출력합니다
    
}
quiz icon실력 점검

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

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Rust 컴파일러