본문 바로가기

Android/UML Diagram

[Android] UML Diagram - UseCase Diagram

728x90

이 전에 작성한 UML Diagram - Class Diagram 에 이어서, UseCase Diagram 에 대한 정리 글을 작성해보고자 한다.

UML Diagram 에 대해 정확히 모르는 경우, 이전에 작성한 글을 읽고 오면 도움이 될 것이다.

https://heegs.tistory.com/67

 

[Android] UML Diagram - Class Diagram

UML Diagram 은 대학생 시절에 배웠던 기억이 있다. 하지만, 실제로 다시 그려보려고 하니 오래되서 그런가.. 잘 기억이 나질 않는다. 따라서, 내용을 복기할 겸 정리를 해보고자 한다. 우선, UML Diagra

heegs.tistory.com


우선, 개념에 대해서 알고 넘어가자.

유즈케이스 다이어그램 (UseCase Diagram) 은

시스템에서 제공해야 하는 기능이나 서비스를 명세한 다이어그램이다.

즉, 외부에서 본 시스템의 기능에 대한 표현이기 때문에 내부 로직이 아닌, 사용자가 제공받을 수 있는 기능(서비스) 를 파악하고자 할 때 작성한다.

 

이전에 작성한 클래스 다이어그램과는 확연하게 차이가 나는것을 알 수 있다.

클래스 다이어그램은 실제 내부 로직을 사용하여 소프트웨어 자체를 설명하는 데 사용하는데 반해,

유즈케이스 다이어그램은 개발자가 아닌 사용자가 시스템을 통해 제공받을 수 있는 서비스에 대하여 설명하는 다이어그램이라고 할 수 있다.

 

PlantUML 로 그린 usecase Diagram 의 일부.

 

이는 유즈케이스 다이어그램의 일부이다.

일부만 확인해 보아도 이전에 그렸던 클래스 다이어그램과 다르다는 것을 알 수 있을 것이다.


위의 유즈케이스 다이어그램을 보면, 클래스 다이어그램과는 구성 요소가 다르다는 것을 알 수 있다.

유즈케이스에서 사용되는 구성 요소에 대하여 알아보자.

 

유즈케이스(UseCase)

타원형으로 표시하며, 시스템이 사용자에게 제공하는 서비스와 기능을 나타낸다.

즉, 사용자가 해당 서비스를 통해서 수행하고자하는 요구사항을 구조화 한 것이라고 볼 수 있다.

클린 아키텍처에서 사용하는 UseCase 와 동일한 개념이라고 필자는 이해했다.

 

액터(Actor)

인간형 기호로 표시하며, 시스템 외부에서 시스템과 상호작용하는 모든 것들을 나타낸다.

 

액터는 시스템을 사용하는 사용자가 될 수있고, 시스템에서 서비스를 제공하기 위해서 도움을 주는 것들이 될 수 있다.

따라서, 액터는 시스템을 사용자인 프라이머리 액터(Primary Actor) 와 서비스 제공을 위해 도움을 주는 세컨더리 액터(Secondary Actor) 로 나누어질 수 있다.

 

프라이머리 액터와 세컨더리 액터는 둘 다 인간형으로 표시할 수 있고, 세컨더리 액터는 인간형 대신 단순 네모형태로 표시하는 경우도 있다.

또한, 세컨더리 액터의 경우 <<Actor>> 라고 반드시 명시해 주어야 한다는 규칙이 있으며,

주로 프라이머리 액터는 다이어그램의 왼편에, 세컨더리 액터는 다이어그램의 오른편에 작성한다.

(필자가 예제로 만들어본 PlantUML 에서는 좌,우로 표시되지 않고 상,하로 표시되기 때문에,

위에는 프라이머리 액터, 아래에는 세컨더리 액터를 만들어두었다.)

 

시스템 범위(Scope)

네모난 상자로 표시하며, 하나의 시스템 범위. 시스템이 제공하는 기능의 범위를 나타낼 때 쓰인다.

범위를 나타낸다고 하지만, 유즈케이스들의 그룹화에 사용한다고 생각하면 편하다.

필자가 사용한 PlantUML에서 scope 를 표시하는 방법에 대하여 알지 못하였기 때문에 이는 표시하지 않았다.

 

관계(Relationship)

유즈케이스에서 관계 표시는 4개가 존재한다.

  • 연관 (Association) : 유즈케이스와 액터 사이에 상호작용이 있음을 표현한다.
  • 포함 (Include) : 화살표 중앙에 <<include>> 를 작성한다. 의존성이 있음을 표현한다. 포함 관계에 있는 유즈케이스는 반드시 실행되야함을 나타낸다.
  • 확장 (Extend) : 화살표 중앙에 <<extend>> 를 작성한다. 확장성을 표현한다. 확장 관계에 있는 유즈케이스는 반드시 실행되는 것이 아닌, 특정 상황에서만 실행된다.
  • 일반화 (Generalization) : 부모 유즈케이스와 자식 유즈케이스 간의 상속관계를 표현한다. 이 때, 자식 유즈케이스는 부모 유즈케이스의 모든 포함, 확장 관계를 만족해야 한다.

유즈케이스를 그려보자.

필자는 안드로이드 스튜디오에서 PlantUML 이라는 Plugin을 사용하여 유즈케이스를 작성하였는데,

해당 플러그인에서는 Scope 에 대한 설정, 포함, 확장 관계에서 중앙에 작성해야하는 텍스트를 포함할 수 없었다.

따라서, 포함, 확장 관계는 코드에서 한 곳으로 모아서 주석을 추가해 주었다.

 

 

좌,우로 액터 표시가 안되어 상,하로 표시하도록 하였다.

여기서 Scope 는 두 액터 사이에 있는 모든 타원형이 들어가는 범위가 되겠다.

 

 

이와 같이 코드를 작성하면 되는데, 여기서 . 과 - 의 갯수에 따라서 계층이 나뉘어 진다고 생각하면 된다.

A .> B 와 A ..> C 는 같은 관계의 표시이지만, . 의 갯수가 하나 더 많기 때문에 다이어그램을 그렸을 때,

위에서 부터 계층을 나누었을 때 B 는 A와 한 계층의 차이지만 C는 두 계층의 차이로 나타나게 된다.

 

클래스 다이어그램의 경우 PlantUML 을 통해 그리는 것이 간편했지만,

유즈케이스 다이어그램의 경우 표시하는 것에 제한이 있는 것이 많기 때문에 PlantUML이 아닌 다른 UML 툴을 사용해야할 것 같다.


유즈케이스 다이어그램은 그리기도 쉽지만, 유의해야 할 부분들이 존재한다.

 

순서도를 그리면 안된다.

유즈케이스 다이어그램을 그릴 때, 많이 하는 실수는 순서도를 그린다는 것이다.

예로들어 쇼핑몰 앱을 사용한다고 해보자.

사용자는 앱에서 구매하고자 하는 물품을 검색하고, 검색한 물품을 구매하는 방식으로 서비스를 제공받는다.

 

그렇다면, 여기서 유즈케이스 다이어그램은

 

사용자 (Actor) > 물품 검색 > 물품 구매

 

의 형태로 되서는 안된다.

물품을 검색하는 것과 물품을 구매하는 것 각각 모두 유즈케이스가 되기 때문이다.

 

사용자 (Actor) > 물품 검색
사용자 (Actor) > 물품 구매

 

와 같은 형태로 2개의 유즈케이스가 존재하도록 그려야 하는 것이다.

두 개의 유즈케이스를 사용하는데 포함, 확장되는 부분이 있다면 이 유즈케이스와 연관을 지어서 표시하면 된다.

 

다음으로,

포함 관계를 남발하면 안된다.

 

포함 관계 (Include) 인 유즈케이스도 기능 중 하나이기 때문에, 액터에서 직접 연관이 있는 기능으로도 표현이 가능하다. 

무분별하게 포함 관계를 작성하다 보면, 다른 유즈케이스에서 포함관계에 있고 액터에도 직접 연결되어있는 구조가 나올 수 있다.

이런 구조는 좋지 않은 구조이기 때문에 이것에 대해서 남발하지 않고, 분리하여 포함 관계에 있으면서 액터에 직접 연결되는 경우를 방지해야 한다.


유즈케이스 다이어그램의 경우,

개념도 상당히 간단하고 그리는 것도, 주의해야 하는 점도 간단하다고 느꼈다.

다만, 예제로 만든 유즈케이스이기 때문에 간단하게 그릴 수 있었지만 실제로 프로젝트에서 유즈케이스를 작성하면 생각보다 많이 복잡해질 것으로 생각된다.

 

위의 유즈케이스 다이어그램 예제는 gitHub의 클린 아키텍처 샘플 코드 - domain 모듈에 함께 작성해 두었으니 전체 코드는 이곳에서 확인하길 바란다.

https://github.com/HeeGyeong/CleanArchitectureSample

 

GitHub - HeeGyeong/CleanArchitectureSample

Contribute to HeeGyeong/CleanArchitectureSample development by creating an account on GitHub.

github.com

 

728x90

'Android > UML Diagram' 카테고리의 다른 글

[Android] UML Diagram - Class Diagram  (0) 2022.02.18