단축 방법: 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!"); // 패닉 발생!이러한 메서드를 사용하면 성공한 값에 빠르게 접근할 수 있지만, 신중하게 사용해야 합니다. 작업이 성공할 것이라고 확신할 때나 개발 및 테스트 중에 사용하는 것이 가장 적절합니다.
챌린지
쉬움두 개의 입력을 받습니다. 첫 번째 입력은 숫자(문자열 형태)이고, 두 번째 입력은 상태 표시자(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] 형식으로 출력합니다
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
7'Result'를 이용한 에러 처리
'Result'란 무엇인가요?'Result'와 함께 'match' 사용하기is_ok()와 is_err()단축 방법: unwrap과 expect물음표 연산자 '?'문자열을 숫자로 파싱하기요약 - 안전한 나눗셈 함수직접 연습해 보세요: 온라인 Rust 컴파일러