✏️10.6 어서션 추가하기 (Introduce Assertion)
리팩터링 전
if (this.discountRate)
  base = base - (this.discountRate * base);리팩터링 후
assert(this.discountRate >= 0);
if (this.discountRate)
  base = base - (this.discountRate * base);🧷 배경
어서션은 항상 참이라고 가정하는 조건부 문장으로, 어서션이 실패했다는 건 프로그래머가 잘못했다는 뜻이다.
어서션은 프로그램이 어떤 상태임을 가정한 채 실행되는지를 다른 개발자에게 알려주는 훌륭한 소통도구이며 디버깅하기 편리한 수단이다.
🧷 절차
1. 참이라고 가정하는 조건이 보이면 그 조건을 명시하는 어서션을 추가한다.
🧷 예시
🧷 리팩터링 전
class Customer {
  applyDiscount(aNumber) {
    return (this.discountRate) 
      ? aNumber - (this.discountRate * aNumber)
       : aNumber;
  }
}🧷 리팩터링 후
class Customer {
  applyDiscount(aNumber) {
    if (!this.discountRate) return aNumber;
    else {
      assert(this.discountRate >= 0);
      return aNumber - this.discountRate * aNumber;
    }
  }
  set discountRate(aNumber) {
    assert(null === aNumber || aNumber >= 0);
    this._discountRate = aNumber;
  }
}Previous10.5 특이 케이스 추가하기 (Introduce Special Case)Next10.7 제어 플래그를 탈출문으로 바꾸기 (Replace Control Flag with Break)
Last updated