본문 바로가기
Concepts/UML

UML - 시퀀스 다이어그램 - 동기, 비동기호출

by ocwokocw 2021. 2. 10.

- 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다.

 

- 동기와 비동기 메시지

UML 에서 내부가 채워진 화살표는 동기 메시지를 나타내고, 선으로만 나타낸 화살표는 비동기 메시지를 나타낸다.

동기 메시지를 보낼 경우 호출하는쪽에서는 메시지가 끝날때까지 기다려야 한다. 반면 비동기메시지를 보낸 경우에는 응답을 기다릴 필요가 없다.

위 그림처럼 동기(sync) 라면 활성바가 생기며, 비동기(async) 라면 활성바가 생기지 않는다.


- 시퀀스 다이어그램은 언제 사용하는가?

시퀀스 다이어그램은 1개 유스케이스에서 여러 객체의 행동을 볼 때 사용한다. 우리가 앞서 그려왔던 다이어그램을 보면 알 수 있듯이 여러 객체간의 협력을 보여주는데에 유용하다.

만약 여러개의 유스케이스에서 객체 하나의 행동을 보고 싶다면 상태 다이어그램을 사용한다. 반면 여러개의 유스케이스나 여러 스레드에 걸친 행동이라면 액티비티 다이어그램을 사용한다.

많은 교류를 탐색하려면 CRC 카드가 유용하다. 확실한 설계를 정하지 않았다면 CRC 카드를 사용한다.


- CRC(Class-Responsibility-Collaboration) 카드

좋은 객체지향 설계를 하려면 객체간의 교류를 잘 탐색해야 한다. CRC는 UML에 속하지는 않지만 유용한 기법이기에 기술한다.

CRC는 동료들과 테이블에 앉아서 다양한 시나리오일 때 어떤 클래스가 어떤 역할을 하는지 논의해보는것이다. CRC의 근본적인 목적은 책임확인이다. 책임을 확인한다니 뭔가 수행하기 어려운기법 같지만 그렇지 않다.

CRC는 3 부분으로 이루어져있다.

  • 클래스명: 위 그림에서 회색인 Order
  • 책임: 위 그림에서 노란색으로 객체가 하는 일을 요약한 것
  • 협력자: 위 그림에서 초록색으로 책임을 행하기 위해 필요한 다른 클래스들(Order Line, Customer)

만약 특정 클래스에 책임 목록이 너무 많다면 "단순히 중요한 클래스네"하고 넘길것이 아니라 이는 리팩토링의 신호가 될 수 있다. 다른 책임들의 집합을 엮어서 하나의 클래스로 추출하거나, 책임을 너무 상세산 수준으로 정의한것이 아닌지 생각한다.

댓글