Design Class Diagram (Ch 19)
DCD는 08-interaction-diagram|Interaction Diagram에서 발견된 소프트웨어 클래스, 메서드, 속성, 관계를 정적으로 정리한 다이어그램이다.
Domain Model과의 차이
04-domain-model|Domain Model은 현실 세계 개념이고, DCD는 소프트웨어 클래스다.
| | Domain Model | DCD | |---|---|---| | 대상 | 현실 세계 개념 | 소프트웨어 클래스 | | 메서드 | 없음 | 있음 | | 목적 | 도메인 이해 | 구현 가이드 | | 연관관계 | 개념적 | 구현 가능한 (navigability 방향 표시) |
Domain Model이 DCD에 주는 것은 이름과 속성의 영감이다. 예를 들어 도메인에 Sale, SalesLineItem이라는 개념이 있으면, 소프트웨어에도 비슷한 이름의 클래스를 만든다.
DCD를 만드는 법
- Interaction Diagram에서 등장한 클래스를 모은다
- 각 클래스에 보낸/받은 메시지를 메서드로 정리한다
- Interaction Diagram에서 드러난 연관관계와 navigability를 추가한다
- Domain Model에서 가져온 속성을 추가한다
핵심: DCD에서 연관관계의 navigability(화살표 방향)는 Interaction Diagram에서 결정된다. 객체 A가 객체 B에게 메시지를 보냈다면, A→B 방향의 연관이 필요하다.
Mermaid 예시: NextGen POS Iteration 1
바이브 코딩에서의 활용
DCD는 LLM에게 넘길 수 있는 가장 완전한 클래스 설계 명세다. 메서드 시그니처, 관계, 속성이 다 있으니 코드 생성에 바로 쓸 수 있다.
프롬프트 예시:
"다음 DCD를 기반으로 Python/TypeScript 클래스를 구현해줘.
클래스 관계:
- Register → ProductCatalog (1:1, register가 catalog를 참조)
- Register → Sale (1:1, 현재 진행 중인 sale)
- Sale → SalesLineItem (1:N, 컬렉션으로 관리)
- SalesLineItem → ProductSpecification (N:1)
- Sale → Payment (1:1)
메서드:
- Register.enterItem(itemID, qty): catalog에서 spec 조회 → sale.makeLineItem(spec, qty)
- Sale.getTotal(): 모든 lineItem의 getSubtotal() 합산
- SalesLineItem.getSubtotal(): quantity × spec.getPrice()
DCD의 navigability 방향대로 참조 관계를 구현하고,
생성자에서 필요한 의존성을 주입받도록 해줘."