Result<T, E>
복구 가능한 실패는 값을 반환하듯 Ok와 Err로 나누어 처리한다
panic!은 프로그램을 중단하지만, Result는
성공 값과 에러 값을 모두 표현한다. 호출자는 match나
보조 메서드로 실패 원인에 맞는 복구 전략을 고를 수 있다.
Ok(T)
Err(E)
match
성공
Ok(file)은 사용할 값을 담는다
실패
Err(error)는 실패 정보를 담는다
복구
NotFound 같은 종류별 대응을 작성한다
파일 열기는 성공과 실패가 모두 정상적인 반환 경로다
실패가 예상되는 작업은 결과값 자체에 분기 정보를 담아 호출자에게 넘긴다.
Call
File::open("hello.txt")
파일이 있을 수도 있고, 없거나 권한이 부족할 수도 있는 작업을 시도한다.
Ok
파일 핸들 사용
Ok(file)이면 값을 꺼내 읽기나 쓰기 작업을 계속한다.
Err
에러 종류별 처리
error.kind()를 확인해 생성, 재시도, 패닉 중 하나를
선택한다.
복구 가능한 에러는 원인을 좁혀서 대응한다
모든 실패를 같은 패닉으로 처리하면 만들 수 있는 복구 경로를 잃는다.
NotFound
파일이 없으면 File::create로 새 파일을 만들 수 있다.
권한 부족
사용자에게 권한 문제를 알리거나 다른 경로를 요청할 수 있다.
unwrap과 expect
복구하지 않을 상황에서는 의도를 담아 빠르게 패닉시킬 수 있다.