Skip to content

Latest commit

 

History

History
73 lines (54 loc) · 1.87 KB

10.6 어서션 추가하기.md

File metadata and controls

73 lines (54 loc) · 1.87 KB

10.6 어서션 추가하기


배경

특정 조건일 참일때만 동작하는 코드가 있다.

ex) 제곱근을 계산할 땐 양수일 때만 동작

이런 코드에서 어서션을 사용해서 코드를 읽지 않고 동작을 명시적으로 추측할 수 있다.

if(this.discountRate)
		base = base - (this.discountRate * base);
assert(this.discountRate >= 0);
if(this.discountRate)
		base = base - (this.discountRate * base);

절차

  1. 참이라고 가정하는 조건이 보이면 그 조건을 명시하는 어서션을 추가한다.
💡 어서션은 시스템 운영에 영향을 주면 안되므로 어서션을 추가한다고 해서 동작이 달라지지 않는다.

예시

아래 코드는 고객이 상품 구입 시 할인율을 적용받는 코드인데, 여기에서 할인율이 항상 양수라는 가정이 깔려있다. 어서션을 사용해서 이 가정을 명시하는 과정을 알아보자

applyDiscount(aNumber) {
	return (this.discountRate)
		? aNumber - {this.discountRate * aNumber)
		: aNumber; 
}
  1. 3항 표현식에는 어서션을 넣을 장소가 적당하지 않아 if-then으로 변경하기
applyDiscount(aNumber) {
	if (!this.discountRate) return aNumber;
	else return aNumber - {this.discountRate * aNumber);
}
  1. 어서션 추가하기
applyDiscount(aNumber) {
	if (!this.discountRate) return aNumber;
	else {
		assert(this.discountRate >= 0);
		return aNumber - {this.discountRate * aNumber);
	}
}
  1. 그런데 위와 같은 경우는 어서션을 세터 부분에 추가하는 것이 좋음. 왜냐면 위 함수에서 예외가 발생했다면 언제 예외가 처음 발생했는지 추척해야 하기 때문이다.
--- Customer 클래스
set discountRate(aNumber){
	asset(null === aNumber || aNumber >= 0);
	this._discountRate = aNumber;
}