<문제 해설>
클래스에 대한 여러 가정을 공유하도록 명세한 것을 협약에 의한 설계(Design by Contract)라 함.
소프트웨어 컴포넌트에 대한 정확한 인터페이스 명세를 위하여 선행조건, 결과조건, 불변조건을 나타내는 설계 방법.
협약에 의한 설계의 세 가지 타입
선행조건(precondition): 오퍼레이션이 호출되기 전에 참이 되어야 할 조건
결과조건(postcondition): 오퍼레이션이 수행된 후 만족하여야 하는 조건
불변조건(invariant): 클래스 내부가 실행되는 동안 항상 만족하여야 하는 조건(예: 리스트에 있는 노드가 항상 오름차순으로 되어야 함)