research

Interaction Diagram과 Use-Case Realization (Ch 15, 17)

Interaction Diagram과 Use-Case Realization (Ch 15, 17)

Interaction Diagram은 소프트웨어 객체 간의 메시지 흐름을 그린 것이다. Larman이 이 책에서 "설계의 심장"이라고 부르는 산출물이 바로 이것이다. 도메인 모델이나 SSD보다 만들기 어렵고, 더 많은 설계 판단이 필요하다.

Use-Case Realization이란

유스케이스를 소프트웨어 객체의 협력으로 "실현(realize)"하는 것이다. 유스케이스의 각 시스템 이벤트에 대해 "어떤 객체들이 어떤 순서로 메시지를 주고받으면 이 이벤트를 처리할 수 있는가"를 Interaction Diagram으로 보여준다.

산출물 간의 연결:

시스템 이벤트별로 하나씩

보통 시스템 이벤트 하나당 Interaction Diagram 하나를 그린다. Process Sale이라면:

  • makeNewSale → 다이어그램 1
  • enterItem → 다이어그램 2
  • endSale → 다이어그램 3
  • makePayment → 다이어그램 4

예시: enterItem의 설계 과정

Contract에서 사후조건은:

  • SalesLineItem 인스턴스 생성
  • 현재 Sale에 연결
  • quantity 설정
  • itemID에 맞는 ProductSpecification에 연결

이걸 07-grasp-patterns|GRASP로 풀어나간다:

  1. ControllerRegisterenterItem(itemID, qty) 메시지를 받는다
  2. Expert → ProductSpecification 조회는 누가? ProductCatalog가 모든 spec을 알고 있으니 ProductCatalog.getSpecification(itemID)
  3. Creator → SalesLineItem 생성은 누가? Sale이 SalesLineItem을 포함하니 Sale.makeLineItem(spec, qty)
  4. Sale 안에서 SalesLineItem 인스턴스를 만들고 컬렉션에 추가

예시: makePayment의 설계 과정

Payment를 Register가 만들까, Sale이 만들까? 둘 다 Creator 후보다.

Low Coupling으로 평가: Register가 만들면 Register-Payment 결합이 추가된다. Sale이 만들면 Sale-Payment 결합만 생기고, Sale은 어차피 Payment와 밀접하다. → Sale이 만드는 게 낫다.

핵심 교훈

Interaction Diagram을 그릴 때마다 되물어야 하는 질문:

  • 이 메시지를 왜 이 객체에 보내는가? (Expert? Creator? Controller?)
  • 대안은 없는가? (Low Coupling, High Cohesion으로 평가)
  • 변화 지점은 어디인가? (Protected Variations로 인터페이스 도입)

바이브 코딩에서의 활용

Interaction Diagram은 LLM에게 구현 순서와 메서드 호출 체인을 알려주는 가장 직접적인 형태다.

프롬프트 예시:
"enterItem(itemID, qty) 시스템 이벤트의 처리 흐름을 구현해줘.

호출 체인:
1. Controller(Register/OrderController)가 enterItem을 받는다
2. ProductCatalog에서 itemID로 ProductSpecification을 조회한다
3. Sale에게 makeLineItem(spec, qty)를 요청한다
4. Sale이 SalesLineItem을 생성하고 내부 컬렉션에 추가한다
5. description과 running total을 리턴한다

설계 원칙:
- Register는 ProductCatalog를 알고 있다 (startup 시 연결됨)
- Sale이 SalesLineItem을 생성한다 (Creator: Sale이 SalesLineItem을 포함)
- 총액 계산은 Sale이 한다 (Expert: Sale이 모든 LineItem을 알고 있음)"

Interaction Diagram의 메시지 흐름을 그대로 프롬프트에 넣으면, LLM이 메서드 시그니처와 호출 순서를 정확하게 생성한다.