개요

특정 조건이 참일 때만 제대로 동작하는 코드

이런 코드는 조건이 코드에 항상 명시적으로 기술되어 있지 않다.

알고리즘을 보고 알아내야 한다. 주석도 없는 경우도 있다.

좋은 방법은 assertion 코드 추가다.

 

어셔션은 항상 참이라 가정하는 조건부 문장이다.

이셔션은 프로그램에 영향을 주지 않도록 작성돼야 한다.

 

예시

할인 관련 코드



class Customer {
    applyDiscount(aNumber){
        return (this.discountRate)
            ? aNumber - (this.discountRate * aNumber)
            : aNumber;
    }
}
//간단한 구조 개선
class Customer {
    applyDiscount(aNumber){
        if(!this.discountRate) return aNumber;
        else return aNumber - (this.discountRate * aNumber);
    }
}
//어서션 추가
class Customer {
    applyDiscount(aNumber){
        if(!this.discountRate) return aNumber;
        else {
            assert(this.discountRate>=0);
            return aNumber - (this.discountRate * aNumber);
        }
    }
}


class Customer {
    applyDiscount(aNumber){
        if(!this.discountRate) return aNumber;
        else return aNumber - (this.discountRate * aNumber);
    }
    //문제 범위를 좁히기 위해 세터에 옮겼다.
    //applyDiscount에서 통과 못했을 때 추가로 추적을 해야 하기 때문이다.
    set discountRate(aNumber){
        assert(null === aNumber || aNumber >= 0);
        this._discountRate = aNumber;
    }
}

위와 같은 어서션은 오류의 출처를 특정하기에 좋다.

 

어서션은 참이라고 '생각되는' 가정에 붙이는 아니다.

'항상' 참인 것에 붙인다.

 

 

+ Recent posts