계약에 의한 설계

IT 위키
(협약에 의한 설계에서 넘어옴)

Design by Contract; DbC; 협약에 의한 설계

컴포넌트를 호출하는 쪽과 제공하는 쪽이 지켜야 할 의무를 명세로 못박아 두는 설계 방법

버트란드 마이어(Bertrand Meyer)가 Eiffel 언어를 만들며 제시했다. 상거래 계약처럼 "네가 이 조건을 지키면, 나는 이 결과를 보장한다" 는 형태로 인터페이스를 규정한다.

세 가지 조건

[편집 | 원본 편집]
조건 영문 누가 지키나 내용
선행 조건 Precondition 호출하는 쪽 오퍼레이션을 호출하기 에 참이어야 하는 조건
결과 조건 Postcondition 제공하는 쪽 오퍼레이션이 끝난 에 만족되어야 하는 조건
불변 조건 Invariant 양쪽 오퍼레이션이 실행되는 동안 항상 만족되어야 하는 조건

계좌에서 돈을 빼는 오퍼레이션이라면 다음과 같다.

  • 선행 조건 : 출금액이 0보다 크고 잔액 이하여야 한다.
  • 결과 조건 : 실행 후 잔액 = 실행 전 잔액 - 출금액
  • 불변 조건 : 잔액은 언제나 0 이상이다.

선행 조건을 어긴 것은 호출한 쪽의 잘못이고, 결과 조건을 못 지킨 것은 제공한 쪽의 잘못이다. 책임 소재가 명세만으로 갈린다.

  • 인터페이스 명세가 구체적이어서 컴포넌트를 재사용할 때 오해가 줄어든다.
  • 조건을 그대로 단정문(assertion)으로 옮기면 실행 중에 위반을 잡아낼 수 있다.
  • 조건이 곧 테스트 케이스가 되어 소프트웨어 테스트 설계가 쉬워진다.
  • 방어 코드를 양쪽에서 중복으로 넣는 일을 줄인다.

같이 보기

[편집 | 원본 편집]