개발언어/Python
계약에 의한 디자인 (Design by Contract)
pastime
2020. 11. 8. 14:36
728x90
- 사전조건 : 코드가 실행되기 전에 체크해야하는것들이다.
함수가 진행되기 전에 처리되어야하는 모든 조건을 체크한다.
일반적으로 파라미터에 제공된 테이터의 유효성을 검사하지만 유효성 체크를 통해 부작용이
초소화된다는 점을 고려할 때 유효성 검사를 많이 하는것이 좋다.
eg) DB, File, 이전에 호출된 다른 메서드의 검사 등이다. - 사후조건 : 사전조건과는 반대로 함수 반환 값의 유효성 검사가 수행
호출자가 이 컴포넌트엣거 기대한 것을 제대로 받았는지 확인하기 위해 수행 - 불변식 : 함수의 docstring에 불변식에 대해 문서화하는 것이 좋다.
불변식은 함수가 실행되는 동안에 일정하게 유지되는 것으로 함수의 로직에 문제가 없는지 확인하기 위한 것이다. - 부작용 : 선택적으로 코드의 부작용을 docstring에 언급하기도 한다.
사전조건
적절한 데이터를 전달하는지 eg) 초기화된 객체, null 여부, 데이터의 타입 등을 체크한다
사후조건
메서드 또는 함수가 반환된 후의 상태를 강제하는 계약의 일부
python스러운 계약
함수 및 클래스에 RuntimeError 예외 또는 ValueError 예외를 발생시키는 제외 메커니즘을 추가
올바른 예외 타입이 무엇인지 일반적인 규칙을 만드는것은 어려운일이다.
문제를 특정하기 어려울 경우 사용자 정의 예외를 만드는것도 좋다.
디자인 원칙은 문제가 있는 부분을 효과적으로 식별하는데 있다.
코드가 견고해지고 불변식이 유지되는 한 프로그램이 정상 동작 한다.
프로그램 구조를 명확히 하는 목적이다. 하지만 이러한 원칙을 따르면 추가작업이 필요하다.
계약 작성 및 계약에 대한 단위 테스트를 추가적으로 해야하지만 품질로 보상이 된다.
728x90