caffeine-library / Domain-Driven-Design

🌱 에릭 에반스의 '도메인 주도 설계'를 읽는 스터디
4 stars 0 forks source link

[additional] 계약에 의한 설계(Design By Contract) #50

Closed emiling closed 1 year ago

emiling commented 1 year ago

질문

이전에 오브젝트 책도 그렇고 본 책에서도 계약에 의한 설계(Design By Contract)라는 말이 종종 언급됩니다. 해당 용어의 개념과 맥락에 대해 한 번 정리하고 가는 것이 좋을 것 같아 이슈를 생성했습니다.

세부 내용

연관 챕터

https://github.com/caffeine-library/Domain-Driven-Design/issues/47

leejaeseung commented 1 year ago

프로그래머가 계약된 대로만 프로그래밍할 수 있으니 견고한 프로그램을 만들 수 있겠지만, 계약이 변경되는 경우도 항상 고려하면 더 좋을 것 같네요. 기존의 정책이 들쑥날쑥하게 바뀌는게 현업이다 보니.. 어떤 계약에 대해 확신을 갖고 프로그래밍하는게 쉽진 않더라구요.(그땐 맞는 정책이었겠지만)

한 가지 예시로 저희 기존 코드에선 어떤 변수가 빈 리스트일 수 없다는 정책으로 NonEmptySeq 라는 불변식이 적용된 리스트를 사용하고 있었는데 최근에 빈 리스트가 될 수 있도록 정책이 바뀌면서 이를 적용하기가 까다로웠습니다. 오히려 견고한 프로그램이다보니 그 견고함을 깰 수가 없었죠.(모든 로직이 NonEmptySeq 로 짜여있어 영향범위가 엄청나겠더라구요)

모든 걸 고려할 순 없지만, 무언가의 패턴이나 방식을 적용할 때 항상 단점도 고려하며 개발해야겠다는 생각이 드네요.(결국 정답은 없다..)

emiling commented 1 year ago

배경

계약

계약에 의한 설계

이를 위해 클래스와 메서드에 대해 개발자가 사실임을 보장하는 "단언"을 사용

C# 등에는 DBC를 지원하는 Code Contracts 같은 라이브러리가 있지만 이는 JAVA assertion 같은 것으로 충분히 대체 가능하는 점에서 "단언" 을 사용한다고 한 것으로 보임