지난 글에서 UML에 해당하는 use case diagram 와 activity diagram에 대해 알아봤다.
물론 글 마지막에 sequence diagram도 약간 다루었다.
궁금하면, 이전 글을 참고하자
https://2hiidevdang.tistory.com/13
[소프트웨어 설계] Unified Modeling Language (UML) - (1) usecase diagram (2) activity diagram (3) sequence diagram
Unified Modeling Language (UML) 소프트웨어 프로그램을 시각화하기 위해 다이어그램으로 구성된 표준화된 모델링 언어 UML diagrams describe the boundary, struture, and the behavior of the system and the objects within it 객
2hiidevdang.tistory.com
- 종류
- Behavior Diagram → 시스템의 동적 동작
- Structural Diagram → 시스템의 정적 구조
지난 글에서 이렇게 diagram을 두가지 종류로 나눴다.
Behavior Diagram에 해당하는 diagram은 usecase, activity, sequence등이 있고,
Structural Diagram에 해당하는 diagram이 이번 글에서 설명할 class diagram이다.
글에 들어가기에 앞서, Sequence diagram에 대해 다시 알아보겠다.
Sequence diagram
이른바, 메시지의 제어흐름을 나타내는데, "객체"끼리의 흐름을 나타낸다.
이런 객체의 동작을 설명하며, 프로세스의 시간순서를 드러내는 diagram이다.
Sequencd diagram - notation
1. LifeLine : 네모박스 + 점선, 점선이 위에서 아래로 내려올수록 시간의 경과를 표시한다.
2. Activations : 다른 인스턴스와 상호작용을 하며 활성화된다. 한 예로, 정보를 처리하는 중이거나 정보를 기다릴 때 사용된다.
3. Message : 인스턴스간의 주고받은 데이터로 요청과 응답으로 이뤄진다.
- 동기 메시지 : 요청 후 응답을 기다림 (실선)
- 비동기 메시지 : 요청 후 응답을 요구하지 않음 (실선)
- 자체 메시지 : 자신에게 보내는 메시지
- 반환 메시지 : 요청에 대한 메시지를 반환 (점선)
4. Guard/Sequence Fragment (흐름제어)
guard : 메시지에 조건을 명시 (대괄호 [ ] 를 사용)
--> 가격이 만원이상이면 배송비무료, 만원 미만이면 해당메시지 호출이 되지않는다.
[범위로 조건을 명시]
- Alternative (alt) : 조건문인 if/else문을 Guard를 사용해 표현, 조건에 따라 선택 사항이 '여러 개'일 경우
--> 1만원 이상이면 배송비를 무료로 처리하고, 그렇지 않으면 배송비를 유료로 처리한다.
- Option (opt) : 조건문인 if문을 Guard를 사용해 표현, 조건에 따라 선택 사항이 '단 한개'일 경우
- Guard : A -> B ////예시: 가격이 만원이상이면 배송비 무료
- Option : A -> B,C,D //// 예시 : 가격이 1만원 이상이라면 배송비를 무료로 처리하고, 고개이 추가할인 쿠폰을 요청하고 쿠폰이 제공된다.
- Loop (loop) : 반복문(for/while)을 표현
--> 입력된 시간이 2020-08-01보다 작을 때 반복문을 실행하고 그 하위 조건으로 처리한다.
- Parallel (par) : 병렬처리
--> 상품 주문이 들어왔을 때, 상품 확인과 배송 여부 확인을 병렬로 진행한다.
그럼 이제부터, 예제 문제를 풀어봅시당!
문제 : 식당에서 음식을 주문하는 Sequence diagram을 그려라
[시나리오]
1. 고객은 식당에서 메뉴판을 확인한다.
2. 고객은 본인이 원하는 음식을 고를 지, 아님 직원이 추천해주는 음식리스트를 받을 지 결정한다.
3. 선택한 음식의 수량이 남아있을 경우, 주문이 접수되고, 그렇지 않을 경우 음식을 주문할 수 없다.
4. 주문서가 완성된 경우, 고객은 비용을 지불한다.
[sequence diagram]
sequence diagram 을 그리는 방법
1. actor, object를 그린다.
2. Lifeline을 그린다. : 아래로 갈수록 시간이 지났음을 의미한다.
3. 일이 일어나는 순서릀 생각해보며 메시지를 그린다.
4. combined Fragment (alt, loop, par, opt ..)도 필요 시 그려준다.
Class Diagram?
시스템의 구조를 설명하는 정적 구조
- Structural Diagram → 시스템의 정적 구조
로서, 구성요소로는 (1) 클래스, (2) 속성, (3) 기능, (4) 객체간의 관계 를 가지고 있다.
또한, 클래스 간의 의존관계를 표현한다.
- 객체의 청사진 -> 객체의 유형을 설명하는 것으로, 클래스가 객체 자체는 아님
- 동일한 클래스에서 만들어진 객체는 동일한 구성요소들을 지닌다.
Class간의 관계
- 일반화 : 자식 클래스는 부모의 속성과 기능을 상속받는다. 즉, 자식 클래스는 부모 클래스를 통해 '일반화'가 되고 부모 클래스는 자식 클래스를 통해 '구체화'가 된다. 또한 '오버라이딩'을 통해 부모의 기능을 자식이 재정의 할 수도 있다.
- 실체화 : 인터페이스의 spec(명세, 정의)만 있는 메서드는 오버라이딩하여 실제 기능으로 구현한다.
- 의존 : 클래스가 다른 클래스를 참조한다.
- 참조의 의미1 : 객체 생성
- 참조의 의미2 : 매개변수
- 참조의 의미3 : 메소드 호출
- 연관 : 의존처럼 다른 객체의 참조를 가지는 필드
- 집약(집합) (약한 연관관계) : 연관관계의 하나의 종류로 '전체 - 부분'의 집합관계를 보여주기위해 조금 더 특수하게 표현한다. 연관관계는 집합의 의미를 내포하지는 않는다. (cf. 연관과 집약(집합)은 개념적 차이로 코드단에서 구분하기 어렵다.)
- 합성 (강한 연관관계) : 집합보다 더 강한 집합
엔진과 바퀴는 차가 없어져도 남아있다. -> 생명주기가 독립적이므로 약한 연관관계라고 할 수 있다.
사람이 죽으면 신체기관이 소멸한다. -> 생명주기가 의존적이므로 강한 연관관계라고 할 수 있다.
다중성 표시
클래스간의 관계 (약한/강한)는 일대일, 일대다, 다대다로 표현한다.
선에 숫자가 없으면 일대일 관계이다.
그럼, Order System Diagram을 한 번 그려보자.
[해석]
1. Customer 과 Order 은 1대다 관계이며, Customer 1명당 Order이 0또는 그 이상 있다는 의미이다.
2. Order 과 OrderDetail은 집합관계로 약한연관관계에 있다. 1대다 관계이며, Order하나 당 OrderDetail이 하나또는 그 이상존재한다.
3. OrderDetail와 Item은 1대다 관계이며, OrderDetail이 0혹은 그 이상 존재할 때, Item은 하나 존재한다.
4. Order과 Payment 는 1대다 관계이며, Order이 하나 존재할 때 Payment는 하나 이상 존재한다.
5. Cash, Check, Credit은 Payment를 일반화한 것으로 일반화란 자식 클래스는 부모의 속성과 기능을 상속받는다. 또한 이 관계는 1대1 관계이다.
됐나용?