항상 참이어야 하는 가정을 코드에 박아 두는 조건문. 실패한다면 프로그래머가 잘못했다는 뜻이다.
function applyDiscount(base: number, rate: number) {
console.assert(rate >= 0, 'rate는 음수일 수 없다')
return rate ? base - rate * base : base
}- 코드가 어떤 상태를 전제로 동작하는지 다른 개발자에게 알려 주는 소통 도구다. 주석보다 낫다
- 오류가 처음 생긴 곳 가까이에서 드러나게 해, 원인을 찾기 어려운 버그에서 특히 값을 한다
- 어서션이 있든 없든 프로그램 동작은 같아야 한다. 어서션 실패를 다른 코드가 잡아서 처리하면 안 된다
- 외부 입력 검증과 구분한다: 사용자 입력이나 API(Application Programming Interface) 응답처럼 틀릴 수 있는 값은 어서션이 아니라 정식 검증과 오류 처리 대상이다(예외 처리 원칙, Bean Validation). 어서션은 "절대 일어나면 안 되는" 내부 가정에만 쓴다
- 호출부에서 실수로 인자를 빠뜨리는 것을 잡는 데도 유용하다
테스트에서 쓰는 단언(expect)과는 목적이 다르지만 생각은 같다. 가정을 실행되는 코드로 남긴다(자가 테스트 코드).
출처: 『리팩터링 2판』 마틴 파울러 (원서 Refactoring, 2nd Edition) · refactoring.com: Introduce Assertion · Refactoring.Guru: Introduce Assertion