API Boundary
에러 처리는 값을 검증할 위치를 정하는 설계다
호출자에게 실패를 맡길지, API 계약 위반으로 멈출지, 타입 생성 시점에 막을지를 경계별로 나눈다.
경계
입력 경계
문자열, 파일, 네트워크 값은 실패 가능성을 열어 둔다.
생성 경계
Guess::new 같은 생성자가 유효 범위를 한 번 확인한다.
사용 경계
검증된 타입을 받는 함수는 내부에서 같은 검사를 반복하지 않는다.
01
원시 입력
사용자 입력은 형식과 범위가 아직 증명되지 않은 값이다.
02
검증 함수
실패가 예상되면 Result로 거절 이유를 돌려준다.
03
커스텀 타입
성공한 값은 잘못된 상태를 표현할 수 없는 타입으로 감싼다.
04
안전한 사용
함수 시그니처가 유효성을 보장하므로 본문은 핵심 로직에 집중한다.
전략 좋은 위치 위험 신호
Result 호출자가 재시도, 메시지 표시, 대체값 선택을 할 수 있는 경계 호출자의 복구 선택지를 panic!으로 빼앗음
panic! 계약 위반이 호출자 코드의 버그이고 계속 진행이 위험한 지점 흔한 사용자 입력 실패를 프로그램 중단으로 처리함
커스텀 타입 여러 함수가 같은 유효 범위를 반복해서 요구하는 경우 검증 없이 필드를 직접 수정할 수 있게 열어 둠
필드 비공개
검증된 타입은 내부 값을 직접 바꾸지 못하게 해야 보장이 유지된다.
문서화
패닉 조건과 반환 오류는 API 사용자가 읽을 수 있는 문서에 둔다.
검사 위치
값이 들어오는 가장 바깥쪽에서 검증하고 안쪽은 타입을 믿는다.