**계약에 의한 설계(Design by Contract, DbC)**는 메서드와 호출자 사이의 관계를 형식적 합의로 취급하며, 세 가지로 정의됩니다: 선행 조건(precondition)(호출자가 보장해야 하는 것), 후행 조건(postcondition)(메서드가 그 대가로 보장하는 것), 그리고 불변식(invariant)(객체에 대해 항상 참인 것).
세 가지 의무
text
선행 조건 → 호출자의 의무: 메서드가 올바르게 실행되기 위해 요구하는 입력/상태
후행 조건 → 메서드의 의무: 반환 시 약속하는 것 (선행 조건이 성립했다면)
불변식 → 객체의 항상 참인 속성, 모든 메서드 전후로
코드로
python
:
():
._balance = balance
._check_invariant()
():
amount > ,
amount <= ._balance,
old = ._balance
._balance -= amount
._balance == old - amount,
._check_invariant()
():
._balance >= ,
