Result 선택

Result 처리는 실패 책임을 현재 함수와 호출자 중 어디 둘지 고르는 일이다

실패를 복구할 수 있으면 현재 함수에서 분기하고, 더 높은 맥락이 필요하면 호출자에게 넘긴다. unwrapexpect는 실패가 버그이거나 학습 예제일 때만 좁게 쓴다.
복구 가능다른 파일, 기본값, 재시도로 이어갈 수 있는가. 실패가 버그불변식이 깨졌을 때 바로 멈추는 편이 나은가. 호출자 맥락상위 함수가 사용자 메시지와 정책을 더 잘 아는가.
Result 처리 방식 선택표
방식 쓰는 상황 코드 감각 주의점
match 성공과 실패 모두에서 현재 함수가 할 일이 있다. Ok(value)Err(error)를 명시적으로 나눈다. 분기가 길어지면 실패 처리 의도가 묻힐 수 있다.
unwrap 예제, 임시 코드, 절대 실패하지 않는 불변식 확인에 한정한다. 실패 시 panic으로 즉시 중단된다. 운영 코드에서는 원인 설명이 부족하다.
expect 실패가 버그이고, 멈출 때 이유를 남기고 싶다. expect("설명")으로 실패 맥락을 붙인다. 사용자 입력 실패 같은 정상 흐름에는 맞지 않는다.
물음표 현재 함수가 복구하지 않고 호출자에게 실패를 넘긴다. File::open(path)?처럼 성공 값만 이어 쓴다. 반환 타입이 호환되는 Result여야 한다.
맥락 추가 오류 종류보다 어느 작업에서 실패했는지가 중요하다. 파일명, 단계명, 사용자 행동을 함께 전달한다. 원본 오류를 잃지 않게 감싸는 편이 낫다.
Recover here대체 경로가 있으면 현재 위치에서 처리한다.
Prove invariant실패가 코드 버그라면 명확히 멈춘다.
Add message멈출 때는 사람이 이해할 설명을 남긴다.
Propagate정책 판단은 호출자에게 넘긴다.