16.3 Result
Result
는 고급진 버전의 Option
타입으로 가능한 공백 대신 가능한 에러를 설명한다.
즉, Result<T, E>
는 다음 두 결과 중에 하나를 갖게 된다.
Ok<T>
: 한 요소T
가 왔을 시.Err<E>
: 요소E
로 에러가 왔을 시.
규칙에 따라, 예상되는 결과는 Ok
그렇지 않은 경우는 Err
로 나타낸다.
Option
처럼, Result
는 관련된 많은 메소드를 가졌다. unwrap()
을 예로 들면, 요소 T
나 Panic
들을 생성한다. 사례 처리를 위해 많은 연결자가 Result
와 Option
에 중복하여 존재한다.
Rust로 작업할 시에, parse()
메소드 같은 Result
타입을 반환하는 메소드를 직면하게 될 것이다. 항상 string을 다른 타입으로 변경할 수 있는건 아니기에 parse()
는 Result
를 반환해 가능한 실패를 나타낸다.
string의 parse()
성공과 실패 시에 어떤 일이 일어나는지 살펴보자:
fn double_number(number_str: &str) -> i32 { // Let's try using `unwrap()` to get the number out. Will it bite us? 2 * number_str.parse::<i32>().unwrap() } fn main() { let twenty = double_number("10"); println!("double is {}", twenty); let tt = double_number("t"); println!("double is {}", tt); }
성공하지 못한 경우에, parse()
는 unwrap()
시에 panic
이 발생해 에러를 내고 종료된다. 추가로, panic
은 불쾌한 에러 메시지를 제공하고 프로그램을 종료시킨다.
우리가 에러 메시지의 품질을 향승시키기 위해, 우리는 반환 타입을 보다 명확히 하고, 명시적 에러 처리를 고려해야 한다.