계약 프로그래밍
계약 프로그래밍 (Contract Programming)
계약(contract)은 D 언어에 내장된 방식을 사용해서, 프로그램이 특정 지점에 도달했을 때 반드시 성립해야 하는 조건을 명시하는 기능이에요. 이 장에서는 계약 프로그래밍이 무엇인지, 그리고 D가 어떤 계약들을 제공하는지 전반을 살펴봅니다.
본문
계약(contract)이란 런타임 실행 흐름이 해당 계약에 도달했을 때 반드시 참(true)이어야 하는 조건을 명시할 수 있게 해주는 기능이에요. 만약 어떤 계약이 참이 아니라면, 그 프로그램은 정의되지 않은 상태(undefined state)에 들어간 것으로 간주됩니다.
근거(Rationale): 언어에 계약 지원을 내장하면 다음과 같은 이점이 생겨요.
- 계약들에 일관된 모양과 느낌을 부여합니다.
- 도구(tool) 지원이 가능해집니다.
- 구현체가 계약에서 수집한 정보를 활용해 더 나은 코드를 생성할 수 있습니다.
- 계약의 관리와 강제(enforcement)가 더 쉬워집니다.
- 계약의 상속(inheritance)을 처리할 수 있습니다.
Assert 계약 (Assert Contract)
AssertExpression 장을 참고하세요.
전제 조건과 사후 조건 (Pre and Post Contracts)
전제 조건과 사후 조건도 별도 장에서 다룹니다.
불변식 (Invariants)
참고 자료 (References)
더 알아보기 (Learn more)
- 함수 (Functions) — in/out 계약, 전제·사후 조건
- 표현식 (Expressions) — AssertExpression
- 구조체 (Structs) — 구조체 불변식
- 클래스 (Classes) — 클래스 불변식