✏️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;
  }
}

Last updated