본문 바로가기
BACKEND/개인 공부

UML 다이어그램 (유스케이스, 클래스, 시퀀스)

by 콩밍디 2023. 1. 9.

CHAP 01. UML

UML - 통합 모델링 언어(Unified Modeling Language)


소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어.
소프트웨어 개념을 다이어그램으로 그리기 위해 사용하는 시각적인 표기법

 

모델링의 역사

절차지향모델링(반영 X 한계 도달) > 객체지향모델링(호환성 문제) > UML 공표

 

모델링(Modeling) - 각자 생각하는 것에 따라 다르게 표현
모델링이란 정답이 없으니 정답을 찾으려 하지 말것


모델링이란 - 말 그대로 모델을 만드는 작업
즉, 현실 세계를 단순화 시켜 표현하는 기법

pm들이 작성한 모델링 결과물을 보고
개발(구현) 할 줄 알아야 함

 

UML의 필요성

  • 의사소통 하기 좋음
  • 대규모 프로젝트 구조의 로드맵을 만들 때 유용함
  • 개발할 시스템 구축에 대한 기초 마련 가능
  • 백엔드 문서용으로 제격

UML작성 시 주의점

  • 핵심적인 기능 위주로 작업할 것(행위를 가장 우선적으로 작업)
     - 다이어그램을 복잡하게 그리면 모델링도 복잡하고 상대가 알아보기도 어려움
  • 반복을 통해 다듬을 것
     - 구현을 하면서도 발생하는 문제점을 수정을 통해 다듬어야 함
  • 코드를 마음속에서 그려볼 수 있는 힘이 중요★
     - 다이어그램으로 코드를 대신하려는 것이 아님을 알고 있을 것

다이어그램의 종류

정적다이어그램

- 클래스 다이어그램(프로그램 안의 주요 클래스와 주요 관계를 보여줌)

동적다이어그램
- 유스케이스 다이어그램(시스템과 사용자가 상호작용하는 경우를 나타내는 기능 위주의 다이어그램)
- 시퀀스 다이어그램(시간 흐름에 따른 객체 사이의 상호작용 표현)

 

프로세스별 다이어그램

1. 소프트웨어(프로그램) 개발 프로세스
요구사항 > 분석 > 프로그램 설계 > 프로그램 구현 > 테스트/납품 > 유지 보수

2. 요구사항~분석~프로그램설계
패키지 다이어그램


3. 요구사항
- 유스케이스 다이어그램


4. 분석~프로그램 설계
- 클래스 다이어그램, 객체 다이어그램, 상태 다이어그램, 활동 다이어그램, 상호작용 다이어그램

5. 프로그램 설계
- 컴포넌트, 복합구조, 배치 다이어그램

 

UML의 V프로세스

V모델 - 소프트웨어 공학에서 주로 사용

V모델은 반으로 접었을 때 대칭이 됨
행위자 - 요구사항 명세서
유스케이스 - 액티비티 다이어그램 (기능 모델링)
유스케이스 시나리오 - 시퀀스 다이어그램 (동적 모델링)
유스케이스 시나리오의 정보 - 클래스 다이어그램 (정보 모델링)
블랙박스 분석 - 화이트박스 분석

 

요구사항이란?

고객 및 소프트웨어 개발에 관계된 사람들이 시스템 개발에 앞서 개발되는

프로그램에 필요한 조건이나 능력을 말함.

참여자 기준
- 사용자 요구사항(사용자 관점), 시스템 요구사항(관리자, 설계자 관점), 소프트웨어 요구사항(개발자 관점)

내용 기준
- 기능적 요구사항, 비기능적 요구사항

주체 기준
- 비즈니스(업무) 요구사항


요구사항 프로세스

요구사항 추출(미팅, 인터뷰 등 의사소통) >
요구사항 분석(소프트웨어 환경 분석, 유스케이스 다이어그램 작성) >
요구사항 명세(요구사항 명세서 작성) >
요구사항 검증(프로그램 의뢰 고객사 + 제 3자의 입장으로 검토) >
요구사항 유지보수


요구사항 조건

- 명확성 : 기술된 요구사항은 항상 동일한 의미로 해석되어야 함 (모호하지 않아야 함)
- 완전성 : 사용자가 기대하는 모든 요구사항이 기술되어야 함 (누락되어서는 안 됨)
- 일관성 : 서로 상충되는 요구사항이 있어서는 안 됨
- 검증 가능성 : 객관적으로 검증할 수 있도록 구체적이어야 함


CHAP 02. 유스케이스 다이어그램


유스케이스 모델링

- 이벤트 및 반응 방식 시스템 개발에 효율적인 모델링 방법(기능 모델링)
- 시스템 기능을 사용하는 사용자와 시스템간의 교류를 표현할 것
- 사용자 관점에서 시스템의 요구사항(행동)을 설계하는 것
- 초기 요구사항 분석부터 마지막 시험, 배치 등 전 공정에서 사용할 수 있는 수단
- 시스템이 해야 할 일(Use Case)과 그 행동을 하는 사용자(Actor)을 함께 표현한 모델
- 액터와 유스케이스 관계로 구성

 

유스케이스 다이어그램

- 동적(행위) 다이어그램으로, 시스템 내의 활동들의 흐름을 보여줌.
여러 업무 프로세스를 설명하는 데 자주 활용

액터

- 시스템과 상호작용을 하는 시스템 외부의 존재.
개발 대상에 따라 달라질 수 있음.
ex) 도서관리 시스템 (사서, 학생, sms시스템)
    atm 시스템(atm 사용자, atm 관리자, 은행서버 시스템)
시스템 관점에서 바라본 사용자의 역할을 뜻해야 함.

유스케이스

- 개발 대상이 되는 시스템이 제공하는 개별적인 기능을 뜻하는 것으로
시스템 동작 하나의 기술, 사용자가 인지할 수 있는(눈에 보이는) 하나의 기능 단위
ex) 도서관리 시스템
학생 : 도서대출 신청 / 사서 : 신작도서 등록
atm 시스템
atm 사용자 : 입금, 출금, 이체 / atm 관리자 : 현금 보충 등

 

유스케이스 다이어그램의 특징

  • 사용자의 관점을 빨리 이해할 수 있게 해주어 쓸모있고 유용한 시스템을 만들 수 있음
  • 요구사항 정의 활동이 개발과 설계에 큰 비중을 차지함
  • 유스케이스의 기능과 목적이 아닌 이벤트 흐름이 기술됨
  • 유스케이스에 속한 흐름만 기술함
  • 유스케이스와 연결되지 않는 액터는 표현하지 않음
  • 미리 정의된 공통 용어집이 있는 경우 해당 용어를 사용함
  • 직접적인 어휘를 사용함(간단하게 기술하기 위함)
  • 간단하고 간결한 문장 표현을 위해 부사를 사용하지 않음

유스케이스 다이어그램 관계 종류

연관 관계(실선) - 유스케이스와 액터간 상호작용을 의미하는 관계

연관관계 방향성
활성화 - 액터가 유스케이스를 활성화 시킴 (회원이 도서 대출 버튼을 누름)
수행결과 통보 - 유스케이스 결과가 액터에게 통보됨 (관리자에게 회원의 도서 대출 신청 내용이 전달됨)
와부 서비스 요청 - 외부 시스템에 서비스 실행을 요청함 (신작도서 등록을 sms 시스템으로 문자 발송)

포함 관계(점선) - 한 유스케이스가 다른 유스케이스의 기능을 포함하는 관계
(반드시 해야만 하는 관계)
ex) 개인 정보 조회(기본유스케이스) -------> 로그인(포함유스케이스)
* 포함유스케이스가 실행되지 않으면 기본유스케이스가 작동하지 않는다

확장 관계(점선) - 기본 유스케이스에서 특정 조건이나 액터의 선택에 따라 발생하는 유스케이스
(선택적으로 할 수 있는 관계)
ex) 게시판 등록 <---------- 파일 업로드
게시판 등록을 할 때 파일 업로드를 할 수 있다 (포함 관계와 반대 점선. 파일을 꼭 등록하지 않아도 됨)

일반화 관계 - 유사한 유스케이스들 또는 액터들을 추상화한 하나의 유스케이스로 그룹핑하여 이해도를 높인 관계
ex) 게시글 검색<-제목 검색
                  <-내용 검색
게시글을 검색할 때 제목으로 검색할 수도 있고, 내용으로 검색할 수도 있다.

유스케이스 다이어그램 작업 과정

1. 액터 식별
- 액터를 먼저 도출하고 그 역할을 정의함

2. 유스케이스 식별
- 사용자가 시스템을 통해 얻으려고 하는 기능을 유스케이스 단위로 도출

3. 유스케이스 다이어그램 작성
- 도출한 액터, 유스케이스 무작위 단순 배치
- 중복 의미의 유스케이스 제거 및 불필요한 유스케이스 제거, 그룹핑 작업
- 액터, 유스케이스 간 관계 설정

이벤트 흐름

기본 흐름
- 아무것도 잘못 되지 않았다는 가정 하에 사용자의 자극에 시스템이 어떻게 반응하는지 기술

대안 흐름
- 세부 상황 중 일부가 일이 잘못 되었을 경우 고려한 흐름으로 선택흐름과 예외흐름이 존재
선택 흐름 : 사용자 혹은 시스템에 의해 선택적으로 수행되는 흐름
예외 흐름 : 시스템에서 발생하는 에러 등을 처리하기 위해 수행되는 흐름


CHAP 03. 클래스 다이어그램

클래스 다이어그램

- 정적(구조) 다이어그램으로 UML 모델링에서 가장 일반적으로 사용
시스템의 구조와 구조 간 상호 관계를 나타내며
시스템의 논리적 및 물리적 구성요소 설계 시 주로 활용

+ public / # protected / ~ default / ~ private

 

클래스 다이어그램의 관계

연관관계 A-B
의미 : 클래스 A와 클래스 B는 연결되어있다.
- 한 클래스가 필드로 다른 클래스를 참조할 때를 의미.
클래스 간의 관련성을 뜻하는 것으로 메시지 전달의 통로 역할을 함.

방향성이 있는 연관 관계 - 방향성은 메시지 전달의 방향을 뜻하며 반대 방향은 불가능

연관 관계의 다중성 - 관계를 맺을 수 있는 실제 상대 객체의 수를 다중성을 통하여 지정 가능
동일한 의미/역할의 복수 개의 객체와의 관계

다중 연관 - 동일한 클래스 간의 존재하는 복수 개의 연관 관계를 뜻 함
다른 의미/역할의 복수 개의 객체와의 관계

합성관계 A◀▶B
의미 : 클래스 A는 클래스 B를 한 개 이상 포함하고 있다.

집합관계 A◁▷B
의미 : 클래스 B는 클래스 A의 부분이다.

집합관계와 합성관계
=> 두 대상 간의 포함(소속) 표현으로 항상 Has-a 의미가 성립되어야 함

집합 관계
= 부분 객체가 다수의 전체 객체에 의해 공유될 수 있음
-> 전체 객체가 사라져도 부분 객체는 존재한다.

합성 관계
= 부분 객체가 오직 하나의 전체 객체에 포함될 수 있음
-> 전체 객체가 사라지면 부분 객체도 사라진다.

일반화 관계 A◁-B
의미 : 클래스 B는 클래스 A의 하위 클래스이다.

실체화 관계(인터페이스 실현 관계) A<<interface>>◁---B
의미 : 클래스 B는 인터페이스 A를 실현한다.

일반화 관계와 실체화(인터페이스 실현) 관계
일반화 관계
=> 보다 일반적인 클래스와 보다 구체적인 클래스 간의 관계를 뜻하는 것으로
한 클래스(상위 클래스)가 다른 클래스(하위 클래스)보다 일반적인 개념/대상 임을 의미하는 관계

실체화(인터페이스 실현) 관계
=> 인터페이스에 명시된 기능을 클래스에 의해서 구현한 관계 의미

의존 관계 A----->B
의미 : 클래스 A는 클래스 B에 의존한다.

인터페이스 의존 관계 A----->B<<interface>>
의미 : 클래스 A는 인터페이스 B에 의존한다.

의존 관계와 인터페이스 의존 관계
의존 관계
=> 두 클래스의 연산 간의 호출 관계를 표현한 것으로
제공자의 변경이 이용자에 영향을 미칠 수 있음을 의미
(제공자의 변경이 이용자의 변경 유발)

이용자는 의존 관계를 통해서 제공자의 연산을 호출할 수 있음

인터페이스 의존 관계
=> 인터페이스와 인터페이스 이용자 간의 이용관계를 표현할 때 사용 될 수 있음

연관 관계와 의존 관계
역할 - (공통) 메시지 전달의 통로

표현식
(연관 관계) : class A -> class B
(의존 관계) : class A ----> class B

관계의 발생 형태
(연관 관계) : A 클래스의 필드부에 B 클래스 참조
(의존 관계) : A 클래스의 메소드 매개변수 또는 메소드 내부에 B 클래스 참조

관계의 지속 범위
(연관 관계) : A 클래스의 생명주기
(의존 관계) : 참조된 A 클래스 메소드의 생명주기

방향성
(연관 관계) : 양방향 가능
(의존 관계) : 단방향


CHAP 04. 시퀀스 다이어그램

시퀀스 다이어그램

- 동적(행위) 다이어그램으로 상호작용 다이어그램의 일부분
객체들 사이에서 시간에 따라 발생하는 상호작용을 보여주며,
문제 해결에 필요한 객체를 정의, 객체간의 송/수신 메세지의 순서를
시간의 흐름에 따라 표시하는 다이어그램

 

시퀀스 다이어그램의 장점

어떠한 순서로 어떤 객체들과 어떻게 상호작용 했는지 표현하는 다이어그램이기 때문에
현재 존재하는 시스템이 어떠한 시나리오로 움직이고 있는지를 나타내는 데 장점을 가지고 있음.

시퀀스 다이어그램을 이용하면 API 등의 유스케이스를 디테일하게 알 수 있으며
메서드 콜, DB 조회, 타 시스템의 API 호출 등 로직을 모델링 할 수 있음
(그렇기에 시나리오를 파악하기 좋음!)

시퀀스 다이어그램 구성 요소

1. 액터(Actor) : 시스템으로부터 서비스를 요청하는 외부 요소. (사람이나 외부시스템을 의미)
2. 객체(Object) : 클래스의 객체
3. 생명선(Lifeline) : 객체의 생성, 소멸, 활성화될 때를 나타내는 선 (위 -> 아래, 점선)
4. 활성 박스(Activation Box) : 객체가 다른 객체와 상호작용하며 활성화 되고 있음을 표현 (직사각형)
5. 메세지(Message) : 객체간 주고받은 데이터, 일반적으로 요청(request)과 응답(response)로 구성

생명선과 메세지

생명선 : 액터, 클래스, 객체, 컴포넌스의 인스턴스 등
상호작용에 참여하는 구체적인 대상 표현
생명선 끝에 X자로 끊겨 있으면 소멸

메세지 : 생명선 간에 전달되어 상태의 행위에 대한 호출
* 생명선의 소멸은 자바에서의 가비지 컬렉터에 넘기는 행동이 됨!!

 

시퀀스 다이어그램 메세지 종류

비동기적 메세지 -> : 송신자를 대기시키지 않음
동기적 메세지 -▶ : 송신자를 대기시킴
대답 메세지 <--- : 동기적 메세지의 수행 결과
                  (create)
생성 메세지 -------->  : 생명선 생성
발견된 메세지 ●-▶ : 모르는 송신자로부터의 메세지
유실된 메세지 -▶● : 모르는 수신자로부터의 메세지

 

시퀀스 다이어그램 상호작용 연산자 종류


alt (대체)
메세지의 대체 시퀀스를 포함하는 연산자이며, 어떤 상황에서도 하나의 시퀀스만 발생함
-> if - else - if 문에 해당하는 논리를 나타냄
단, 모든 가드가 false이고 else 가드가 존재하지 않으면 어떠한 조각도 실행되지 않음

opt (옵션)
선택적 요소로 발생하거나 발생하지 않을 수 있는 시퀀스를 포함
-> if 문에 해당하는 논리를 나타냄
대안을 하나만 제공해야 하고 조건이 false일 경우 조각이 실행되지 않음

loop (반복)
루프 상호작용 연산자는 반복적으로 실행되는 부분을 나타냄
가드 안에 단편이 실행되는 횟수를 지정할 수 있음

break (중단)
보통 loop 연산자와 함께 쓰이며
중단 상호작용 연산자는 기타 프로그래밍 언어의 중단 매커니즘과 유사함
조건이 true일 경우 현재 실행을 포기하고 빠져나감
*이 외에 critical, ignore, strict, seq 등이 존재함