![](https://velog.velcdn.com/images/sang1234yun/post/471d283a-5204-48ef-9d5d-7f317dff01e1/image.png)
특정 행동이 어떠한 순서로, 어떤 객체와, 어떻게 상호작용을 하는지 표현
특징
- 2차원 다이어그램
- 수평축: 포함된 상호작용 파트너 (객체)
- 수직축: 상호작용의 시간적 순서
Lifeline
위에서 수평축에 제시되는 "상호작용 파트너"를 lifeline이라고 한다.
- 구성
- Head
- roleName:Class 을 포함하는 사각형
(role은 object보다 general한 개념이다)
- 객체의 lifetime 동안 다른 role을 가질 수 있다.
- Body
- 세로선, (보통 점선)
- 객체가 언제까지 살아있는지 나타냄
- 종류
![](https://velog.velcdn.com/images/sang1234yun/post/2c8c2f7f-6746-4944-b744-b72a5d688ed2/image.png)
a) Role만 / b) Class만 / c) Role+Class
d) Loop를 돌면서 나타내는 다중값 Role
e) 독립적인 Tread를 가지고 있어 Active하게 동작할 수 있는 경우. 다른 프로세스와 상관 없이 독립적으로 작동.
f) 특정 System Operation을 모델링할 때 모델링의 당사자가 되는 Operation을 가지고 있는 경우.
Message
인스턴스간 주고받은 데이터
![](https://velog.velcdn.com/images/sang1234yun/post/76fe6362-4c34-4ada-8006-e7a2b01a8da8/image.png)
이름 | Synchronous Message (동기 메세지) | Asynchronous message (비동기 메세지) | Response message (반환 메세지) | Object creation (객체 생성) |
---|
표기법 | ![](https://velog.velcdn.com/images/sang1234yun/post/47a8fa66-b5e6-40c8-b1cc-3c20eee4af1c/image.png) | ![]() | ![]() | ![]() |
특징 | 전송자는 메세지의 응답을 받을때까지 기다린다. | 전송자는 메세지의 응답을 기다리지 않는다. | 동기 메세지 요청에 대해 응답한다.많은 경우에 생략될 수 있다. | 객체 생성이 필요할 때, 다른 객체가 call. new 키워드를 사용한다. |
Syntax | msg(par1,par2) (msg: 메세지명, par, 파라미터) | msg(par1,par2) | att=msg(par1,par2):val (att: 반환값 저장 변수, val: 반환값 타입) | |
이름 | Object destruction (객체 삭제) | Found message | Lost message | Time-consuming message |
---|
표기법 | ![]() | ![]() | ![]() | ![]() |
특징 | 객체를 삭제한다. | 누가 보냈는지 알기 어렵거나, 알 필요 없을 때 사용한다. | 브로드캐스트 등 메세지 수신자를 알 수 없거나, 중요하지 않을 때 사용한다. | 기간을 가진 메세지에 대해 사용한다. |
Frame
![](https://velog.velcdn.com/images/sang1234yun/post/5c7b2bd0-d205-4a68-8cc5-01f12edb5892/image.png)
Compartment(왼쪽 위 구석에 오각형 (모서리 잘린 사각형))을 포함한 시퀀스를 둘러싼 사각형
간단한 이름이나 연산을 포함하는 interactionIdentifier을 오각형 안에 명시해서 어떤 일이 일어나는지 시각화 할 수 있다.
Self
![](https://velog.velcdn.com/images/sang1234yun/post/05e351eb-9111-47a5-8cfc-2e1165d461c7/image.png)
어떤 interaction이 상호 작용하는 객체 중 하나에 소유될 때
위 경우에 Order이 delete를 own하고 있기 때문에, self:Order로 표시한다.
Local Attribute & Parameter
void func(int par1, int par2){
int x = 0;
String y = "Test";
...
}
![](https://velog.velcdn.com/images/sang1234yun/post/cf6a9244-ca22-420d-ba81-fbdf484b9323/image.png)
Frame의 Compartment에 파라미터를 넣고, 박스에 지역 attribute를 넣거나, 귀가 접힌 메모를 따로 추가하는 방식으로 구현한다.
Combined Fragements
![](https://velog.velcdn.com/images/sang1234yun/post/1a45d224-7d5a-4778-a653-b65a6bd5fd0e/image.png)
Concrete 시나리오에서 다양한 variation을 나타내기 위해 사용한다.
반목, 조건 등의 상황을 범위로 나타낸다.
종류
- 브랜치& 반복
![](https://velog.velcdn.com/images/sang1234yun/post/f1368a56-81cf-4076-8ef0-dcc3c88a09cc/image.png)
- alt
조건에 따라 선택이 여러가지인 경우: if else 문
다중 operand를 가진다.
- opt
조건이 하나인 경우: if 문 -> operand는 하나다
- loop
![](https://velog.velcdn.com/images/sang1234yun/post/bb418295-10e9-420d-a0ee-2587a2f6e897/image.png)
반복문
operand는 하나이다.
loop(min..max) 혹은 loop(min,max) 형태로 최소 최대 수행 횟수를 정할 수 있다.
*는 no limit을 의미한다. ( loop = loop(*) = loop(0,*)
min보다 적게 수행했으면 guard(조건)를 확인하지 않는다.
min~max번의 반복동안, guard가 true면 실행하고, 아니면 빠져나온다.
- break
![](https://velog.velcdn.com/images/sang1234yun/post/b5311e7f-9b3d-4b8b-b608-4c0052b60fe8/image.png)
예외 처리, guard를 가지고 하나의 operand만 가진다.
guard가 true이면 operand 안의 interaction을 실행하고, 바깥부분 fragment는 무시한다.
바깥에 fragment가 없으면, 전체를 바깥 fragment로 생각하고 즉시 종료한다.
위 그림에서 a<1가 true이면 b, c, e 순으로 실행하고 d는 실행하지 않는다.
- 동시성& 순서
- seq
![](https://velog.velcdn.com/images/sang1234yun/post/22a1dced-27fb-466b-838d-a1ee346db08e/image.png)
기본 fragment이다.
Weak Sequencing:
1. 각 Operand 내에서 벌어지는 event의 순서는 결과에서 그대로 유지된다.
2. 서로 다른 lifeline에서의 Operand는 무작위 순서로 발생할 수 있다.
3. 같은 lifeline 내의 다른 Operand는 순서대로 발생한다.
Break문의 범위를 제한하는데 많이 쓰인다.
예를들어, 위 그림에서 break문에 진입한 후 no free place가 참이라면 reserve(exam)을 실행하고, examine()은 무시하고 info()를 실행하게 된다.
- strict
![](https://velog.velcdn.com/images/sang1234yun/post/047445c7-05be-4ac3-8cf3-3eb15b27d64c/image.png)
strict fragement 내의 Operand들은 무조건 위에서 아래의 순서로 실행하게 된다.
Operand 내부는 seq 취급이기때문에, 안에서는 무작위 순서가 발생할 수 있다.
위 그림의 경우, 무조건 a b c d e 순서로 실행된다.
- par
![](https://velog.velcdn.com/images/sang1234yun/post/74d8373f-cbc3-4422-b007-0b4bea14d366/image.png)
strict 반대로 동작한다.
주어진 Operand들은 무작위 순서로 실행될 수 있다.
같은 예제에서, par의 경우, operand 내부에서는, 위에서 seq를 따라 a보다 b가 빨리 나오기만 하면 되고, 아래는 c d e 순서로 나오기만 하면 되는데, 배치는 상관없다.
따라서 a b c d e, a c b d e, a c d b e, a c d e b, c a b d e, c a d b e, c a d e b, c d a b e, c d a e b, c d e a b 모두 가능하다.
- critical
![](https://velog.velcdn.com/images/sang1234yun/post/49bce701-9f7b-4848-819e-426221b5303f/image.png)
하나의 operand만 가지며, operand 내부의 interaction들은 하나의 interaction처럼, 실행되는 동안 다른 interaction의 개입이 있어서는 안된다.
operand 내부는 seq 순서를 따른다.
위 그림에서, c d는 순서대로(같은 lifeline이니깐), 사이에 아무것도 없이 실행되어야 한다. 아래쪽 operand는 seq 방식을 따라, (c d) e 순서로 나와야 함을 알 수 있다.
따라서 가능한 순서는 a b c d e, a c d b e, a c d e b, c d a b e, c d a e b, c d e a b 6가지 경우밖에 없다.
- 필터와 Assertion(검증)
- ignore
![](https://velog.velcdn.com/images/sang1234yun/post/f6d09510-cfec-447d-8838-ad680ab23998/image.png)
현 시나리오에 {}안의 부분이 큰 관계성이 없다고 표시한다.
위 경우 status가 발생할 수는 있지만, 시나리오에 큰 관계성은 없음을 표시한다.
- consider
![](https://velog.velcdn.com/images/sang1234yun/post/444fd673-8cb4-43dd-b868-5bfc939aa99a/image.png)
주어진 부분에서 중요한 부분을 표시한다.
위 그림에서 login, register에만 집중하면 됨을 표현할 수 있다.
- assert
![](https://velog.velcdn.com/images/sang1234yun/post/83d9417a-7fe9-4e0c-9720-9764251d1d53/image.png)
주어진 시나리오 이외의 시나리오는 허용되지 않음을 명시한다.
- neg
![](https://velog.velcdn.com/images/sang1234yun/post/1686dc0b-3eae-4b4d-bb1e-804f7de9a95e/image.png)
주어진 메세지가 발생되어선 안된다고 표시한다.
- 이외
- ref
![](https://velog.velcdn.com/images/sang1234yun/post/4c6c2d08-13e4-4d6f-97cc-b187f44029cc/image.png)
다른 시퀀스 다이어그램을 현재 시퀀스 다이어그램에 병합한다.
Time Constraints
![](https://velog.velcdn.com/images/sang1234yun/post/c6f02505-418e-40bb-8d82-03c030d509a0/image.png)
- 종류
- 특정 시간
- 상대적: after(), before() 등
- 절대적: at(12.00) 등
- 두 이벤트 사이의 시간
- {lower ... upper} e.g. (12.00 ... 13.00)
- 사전 정의됨
State Invariant
![](https://velog.velcdn.com/images/sang1234yun/post/ae19f694-69b6-479d-b041-36e3096a7cbe/image.png)
특정한 객체가 특정한 상태일 때만 lifeline 아래를 실행하게 함.