PromleeBlog
sitemapaboutMe

posting thumbnail
UML 상호작용 다이어그램
UML Interaction Diagrams

📅

🚀

상호작용 다이어그램 (Interaction Diagram)🔗

객체가 메시지를 통해 어떻게 상호작용하는지를 보여주는 다이어그램 →
동적 객체 모델링
시퀀스 다이어그램 (Sequence Diagram)
커뮤니케이션 다이어그램 (Communication Diagram)
타이밍 다이어그램 (Timing Diagram)
상태 다이어그램 (State Diagram)

🚀

시퀀스 다이어그램과 커뮤니케이션 다이어그램 (Sequence Diagram and Communication Diagram)🔗

동등하지만, 다른 초점을 가지고 있음
시퀀스 다이어그램 (Sequence Diagram)
객체 협업 모델

커뮤니케이션 다이어그램 (Communication Diagram)
커뮤니케이션 파트너 간의 관계 모델

예시 (시퀀스 다이어그램과 커뮤니케이션 다이어그램)🔗

image
위는 시퀀스 다이어그램, 아래는 커뮤니케이션 다이어그램
예시 클래스 코드
public class A {
    B myB;
    // 기타 코드
    public void doOne() {
        myB.doTwo();
        myB.doThree();
    }
}

🚀

커뮤니케이션 다이어그램 (Communication Diagram)🔗

두 객체 간의
연결 경로
객체 간의
탐색 및 가시성
의 형태를 나타냄
공식적으로, 링크는
연관
, 의존성 및 집합의 인스턴스(상속 X)
➡️

예시 (링크)🔗

image
:Register에서 :Sale로의 링크 또는 탐색 경로가 있으며, 이 경로를 따라 makePayment 메시지와 같은 메시지가 흐를 수 있다.

메시지 (Message)🔗

메시지 표현과 메시지 방향을 나타내는 작은 화살표
많은 메시지가 링크를 따라 흐를 수 있다.
현재 제어 스레드의 메시지 순서를 나타내기 위해 시퀀스 번호가 추가됨
➡️

예시 (메시지)🔗

image
예시 클래스 코드
public class Register {
    Sale mySale;
		public void msg2() {
        mySale.processMsg2();
    }
		public void msg3() {
        mySale.processMsg3();
    }
		public void msg4() {
        mySale.processMsg4();
    }
		public void receiveMsg5() {
        // 메시지 처리 로직
    }
}
 
public class Sale {
    public void processMsg2() {
        // 메시지 처리 로직
    }
		public void processMsg3() {
        // 메시지 처리 로직
    }
		public void processMsg4() {
        // 메시지 처리 로직
    }
		public void sendMsg5(Register register) {
        register.receiveMsg5();
    }
}

생성 (Creation)🔗

어떤 메시지도 인스턴스를 생성하는 데 사용될 수 있음
이 목적을 위해 create라는 메시지를 사용함(일부는 new로 표시)
UML 태그 값 {new}를 라이프라인 상자에 추가하여 생성을 강조할 수 있다.
덜 명확한 메시지 이름을 사용하는 경우, 메시지를 <<create>>와 같은 UML 스테레오타입으로 주석을 달아서 명확하게 할 수 있다.
➡️

예시 (생성)🔗

image
세 가지 방법으로 생성 표시
:

번호 매기기 (Numbering)🔗

image
번호 없는 메시지
번호 매기기

조건부/상호 배타적 메시지 (Conditional/Mutually Exclusive Messages)🔗

조건부 메시지
image

상호 배타적 메시지
image
특정
조건
에 따라 경로가
분기
된다.
한 경로가 선택되면 다른 경로는 선택되지 않는다.

반복 메시지 (Iterated Messages)🔗

반복 메시지는 1 * [i = 1..n]과 같은 형태로 표현된다.
여기서 i
반복 인덱스
를 나타내며, 1..n은 반복 범위를 나타낸다.
image
image

정적 메소드 호출 (Static Method Call)🔗

수신 객체가 클래스 또는 메타클래스의 인스턴스임을 나타내는 라이프라인 박스 레이블을 사용한다.
image

다형성 메소드 호출 (Polymorphic Method Call)🔗

image
authorize 메소드가 :Register 객체로부터 :Payment 객체로 전달된다.
:Payment는 추상 슈퍼클래스 역할의 객체이다
image
구체적인 구현에 따라 'DebitPayment'나 'CreditPayment' 클래스에서 각각 다른 방식으로 처리될 수 있다.

비동기/동기 호출 (Asynchronous/Synchronous Call)🔗

비동기 호출
은 호출자가 응답을 기다리지 않고 즉시 다음 작업을 수행할 수 있도록 한다.
동기 호출
은 호출자가 응답을 받을 때까지 기다린다.
활성 객체
는 자체적인 스레드를 가지고 독립적으로 실행되는 객체이다.
image
ClockStarter 객체가 Clock 객체의 run 메소드를
비동기적
으로 호출하면, ClockStarterClock의 응답을 기다리지 않고 바로 다음 작업을 수행할 수 있다.
ClockStarter 객체가 System 클래스의 runFinalization 메소드를
동기적
으로 호출하면, ClockStarterSystem의 응답을 받을 때까지 대기한다.
Clock 객체는
활성 객체
로 별도의 스레드에서 실행되며, 다른 객체의 간섭 없이 독립적으로 동작할 수 있다.

🚀

시퀀스 다이어그램 (Sequence Diagram)🔗

컬렉션 반복 (Iteration over a Collection)🔗

동일한 메시지를 컬렉션(리스트 또는 맵) 내 모든 객체에 전송하여 반복
image
👨‍💻
생명선 상자는 여러 SalesLineItem 객체 중 하나의 인스턴스를 나타냄
lineItems[i]는 여러 SalesLineItem 컬렉션에서 하나의 요소를 선택하는 표현식; 'i' 값은 루프 프레임의 조건에서 동일한 'i' 값을 나타냄
액션 박스는 임의의 언어 구문을 포함할 수 있음 (이 경우 'i' 증가)
적용되는 생명선 위에 배치됨

정적 메소드 호출을 위한 클래스에 대한 메시지 (Message to a Class for a Static Method Call)🔗

클래스 또는 정적 메소드 호출을 나타내려면 수신 객체가 클래스, 더 정확히는 메타클래스의 인스턴스임을 나타내는 생명선 상자 레이블을 사용한다
image

다형성 메소드 호출 (Polymorphic Method Call)🔗

다형성 메시지
추상 슈퍼클래스
인터페이스 객체
로 전송
그런 다음 각
다형성 사례
를 자세히 설명하는 별도의 시퀀스 다이어그램을 작성 (다형성 메시지로 시작)
image

비동기/동기 호출 (Asynchronous/Synchronous Call)🔗

UML에서 막대 화살표는 비동기 호출을 의미함
채워진 화살표는 더 일반적인 동기 호출을 의미함
image