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