on
[실용주의 프로그래머] 4장. 실용주의 편집증
[실용주의 프로그래머] 4장. 실용주의 편집증
4장의 제목은 실용주의 편집증입니다. 편집증은 심각한 걱정이나 두려움으로 자신이 주변으로부터 피해를 받을 것이라는 병리적인 의심을 고집하는 이상심리학적 상태..라고 위키에 나와있습니다 ㅎ. 완벽한 소프트웨어를 만드는 것은 현실적으로 불가능합니다. 암울한 현실이지만, 세상엔 불완전한 코드로 가득차 있습니다. 우리는 이 때문에 항상 방어적으로 프로그래밍을 합니다. 잘못된 데이터를 찾기 위해 단정문(assertion)을 사용하고, DB 칼럼에 제약(constraint)을 걸기도 하지요.
하지만 실용주의 프로그래머들은 여기서 한 걸음 더 나아갑니다. 자기 자신도 믿지 않져. 때문에 실용주의 프로그래머는 항상 자신의 실수에 대비해서 방어적인 코드를 짭니다. 고로 이번 장에서는 이러한 방어법과, 데이터 등을 확인, 검증하는 방법, 예외 처리를 잘 하는 방법 등을 알아봅시다. 요새 방어가 철이던데~~
21. 계약에 의한 설계
우리의 프로그램에서 모든 함수나 메서드는 어떠한 무언가를 수행합니다. 이 때, 프로그램의 정확성을 보장하기 위해서 소프트웨어 모듈들의 권리와 책임을 문서화하는 것이 계약에 의한 설계입니다. 자신이 해야하는 역할과 임무를 문서화하고, 이를 검증하는 것이 계약에 의한 설계의 핵심입니다.
이러한 역할(루틴)을 검증하는데 세 가지 개념이 필요합니다.
선행조건 - 루틴이 호출되기 위해 참이어야 하는 것
후행조건 - 루틴이 자기가 할 것
클래스 불변식 - 호출자의 입장에서 볼 때 항상 참이라고 보장되어야 하는 것
이러한 계약에 의한 설계, 즉 DBC를 지원하는 언어도 있습니다. 자바 진영에서는 iContrast라는 전처리기가 있다고 하네요. 첨들어봅니다. 이렇게 단정문을 이용하는 것과 그냥 주석만 적어놓는 것은 큰 차이가 있습니다. 부모 클래스와 이를 상속받는 자식 클래스가 있을 때, 자식 클래스에서 같은 메서드 시그니처를 갖고, 메서드 명과 상관없는 엉뚱한 일을 처리하는 메서드를 만들 수도 있습니다. DBC를 사용하면 이러한 경우를 방지할 수 있습니다.
from http://yoon1fe.tistory.com/250 by ccl(A) rewrite - 2021-11-29 19:27:57