[소프트웨어 분석 및 설계] 6. Activity Diagram
Activity Diagram이란...?
: 일련의 활동(Activity)들로 workflow(i.e.Runtime-control flow)를 표현하는 다이어그램으로 Behavior Modeling을 위한 UML Diagram 4가지 중 하나이다.
- Sequence Diagram(순서 다이어그램) Activity Diagram은 시스템 전체, sub 시스템의 흐름을 표현하지만, Sequence Diagram은 주로 Use Case Set을 다룬다.
추가 정보...
- State Diagram(상태 다이어그램)과의 차이: State Diagram은 하나의 객체의 흐름을 표현함.
그렇다면 이제 Activity Diagram의 구성을 알아보자!

Activity Diagram의 구성요소
1. Action/Activity
Action: 더이상 분해할 수 없는 작업 단위(atomic operation)
Activity: 몇 개의 Action으로 분리될 수 있는 작업(compound, 복합 기능)

2. Initial / Final Node
initial Node: Action이나 Activity가 시작되는 노드로 하나만 존재. 검은색 원 ●으로 표현

final Node
1) Activity Final Node: 전체의 흐름이 종료되는 노드로 일반적으로 하나가 존재. 검은색 원을 포함한 원으로 표현

2) Flow Final Node: 단일 흐름이 종료되는 노드. X를 포함한 원으로 표현

3. Control Flow
: 작업이 연달아 일어나는 Sequential Control Flow가 있음. 이때 객체나 데이터는 Control Flow에 따라 전달되지는 않음.

Choice, Iteration, Closed Loop 등의 Control Flow도 존재함.
4. Decision / Merge Node
1) Decision Node
: 해당 노드로 들어온 flow는 상호 배타적(mutually exclusive)인 Guard Condition을 갖음.

2) Merge Node
: 병합 노드로 여러 flow가 들어오고 이 flow들이 병합되어 하나의 flow로 빠져 나감.

5. Parallelism - Fork/Join
1) Fork Node
: Concurrent 쓰레드들의 시작점
2) Join Node
: Concurrent 쓰레드들의 종점
-> Fork에서의 쓰레드 개수 == Join에서의 쓰레드 개수

6. Exception
Exception Handler: 예외 처리를 하는 기능으로 각 예외 처리에 대해서 Exception 타입이 주어짐.

7. Partition
: 각 participant들에게 기능들을 할당하기 위한 용도로 쓰임. Class, Component, Sub-System 등이 각 partition이 될 수 있음.

8. Object Node / Data Store
1) Object Node: 객체나 데이터가 넘어가는 것을 표현하는 것으로, Action을 취한 다음 어떤 Object를 만드는지 명시하고 싶을 때 씀.

2) Data Store: 객체나 데이터가 아닌 Database가 넘어가는 것을 표현하는 것으로 Object Node와 비슷한 기능.

9. Invocation Patterns
1) Sequential Processing
: 반복, 브랜치, 분할 등의 작업 없이 다양한 기능들의 컴포넌트들이 순서를 갖고서 실행되는 패턴.

2) Explicit Invocation
: 메뉴에서 여러 옵션들이 있고 이를 택하는 패턴. 하나의 옵션이 실행될 때는 다른 옵션들은 실행될 수 없음(synchronous invocation).

3) Closed-Loop
: 다른 개입이 있을 때까지 작업들을 반복하는 패턴
ex) 자율주행 자동차

4) Parallel Processing
: 시스템의 하나의 control flow가 여러 쓰레드로 분리되어 각 쓰레드들이 독립적으로 실행되는 패턴. 모든 쓰레드들이 수행이 끝나면 그들은 병합됨.

5) Event-based
: 이벤트가 도착하면 그에 맞는 이벤트 핸들러를 선택하여 실행해주는 패턴.

6) Timer-based
: 타이머처럼 주기적으로 해당 timer 조건에 맞을 때마다 실행해주는 패턴.

야야 그렇다면 이 Invocation Patterns 예시를 보여줘봐...!!
1) 스마트 거울
-> 거울인데 이미지를 인식하고 그걸 디스플레이로 계속 보여줘야 하니까 Closed Loop를 씀.

2) 정보 검색 및 SW 분석
-> 계속해서 정보를 검색하고 이에 해당하는 작업을 실행하는 것이므로 Closed Loop + Event Processing을 씀.

Activity Diagram 그리는 순서
1) Initial, Final 노드 정의
2) Action / Activity 추가
3) Control Flow 추가 (Branching, Decision, Merge, Loop 등)
4) Fork / Join Node 추가
5) Event Source, Sink 추가
6) Object Node, Data Node 추가
7) Exception Handler 추가