노트

어서션

Assertion

설계#refactoring · 연결된 개념 6개

쉽게 말하면

어서션은 자동차 경고등 같은 거예요. '여기선 이 값이 절대 음수일 리 없다'는 가정을 코드에 박아 두면, 어긋나는 순간 문제가 처음 생긴 바로 그 자리에서 불이 들어와요.

비유가 깨지는 곳 경고등은 운전자 실수도 알려 주지만, 어서션은 사용자 입력처럼 틀릴 수 있는 값을 거르는 데 쓰지 않아요. 그건 정식 검증과 오류 처리의 몫이고, 어서션은 내부 가정에만 써요.

항상 참이어야 하는 가정을 코드에 박아 두는 조건문. 실패한다면 프로그래머가 잘못했다는 뜻이다.

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

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 최소 재현

    버그가 여전히 일어나는 가장 작은 코드와 조건을 만드는 것. 원인을 좁히고, 테스트로 고정하고, 남에게 묻기 쉬워진다.

  • 보호 구문

    정상 흐름이 아닌 경우를 함수 앞부분에서 검사하고 바로 빠져나오는 조건문. 중첩된 if-else를 평평하게 펴서 핵심 흐름을 드러낸다.

  • 집단 코드 소유

    코드의 주인을 개인으로 두지 않고 팀 전체가 코드베이스 전체를 소유해, 누구나 필요한 곳을 고칠 수 있게 하는 XP 실천법.

  • 애자일 선언

    2001년 개발자들이 발표한 선언. 절차보다 사람, 문서보다 작동하는 소프트웨어, 계약보다 협력, 계획보다 변화 대응을 더 가치 있게 여긴다.

  • 테스트 냄새

    테스트 코드나 테스트 습관에서 나는, 더 깊은 문제를 알리는 신호. 제라드 메스자로스의 xUnit 테스트 패턴 정리가 이름을 붙였다.

보기 옵션