복구 가능하면 Result, 계약이 깨지면 panic을 고른다
실패를 호출자가 다룰 수 있는지, 이후 코드가 안전하게 계속될 수
있는지, 타입으로 막을 수 있는지가 선택 기준이다.
판단 질문
예상 가능한 실패인가
파일 없음, 파싱 실패, 요청 제한처럼 호출자가 선택할 수 있으면
값으로 돌려준다.
계약 위반인가
불변식이 깨져 계속 실행하면 위험하면 패닉이 버그를 드러낸다.
타입으로 막을 수 있는가
잘못된 값을 애초에 만들 수 없게 하면 반복 검사가 줄어든다.
01
예제·테스트
unwrap, expect가 실패 위치를 빠르게
드러내는 표시가 된다.
02
호출자 복구
입력 오류나 네트워크 실패처럼 재시도·대체가 가능하면
Result가 맞다.
03
계약 위반
범위 밖 메모리 접근처럼 계속 진행이 위험하면
panic!으로
멈춘다.
04
타입 보장
검증된 값만 담는 타입을 만들면 함수 내부 검사가 단순해진다.
| 상황 | 선택 | 문서화할 점 |
|---|---|---|
| 사용자가 고칠 수 있는 입력 실패 | Result<T, E> |
어떤 오류가 반환되고 호출자가 무엇을 해야 하는지 적는다. |
| API 계약 위반 | panic! |
어떤 전제가 깨지면 패닉이 나는지 공개 API 문서에 둔다. |
| 유효 범위가 반복되는 값 | 커스텀 타입 | 생성자에서 검증하고 필드는 직접 바꾸지 못하게 한다. |
기본값
라이브러리 함수는 호출자에게 선택권을 남기기 위해
Result를 우선한다.
패닉 근거
계속 실행하면 보안상 위험하거나 불변식이 이미 깨진 상태일 때만
강하다.
expect 문구
컴파일러가 모르는 전제를 사람이 읽을 수 있게 남긴다.