본문 바로가기

Android/UML Diagram

[Android] UML Diagram - Class Diagram

728x90

UML Diagram 은 대학생 시절에 배웠던 기억이 있다.

하지만, 실제로 다시 그려보려고 하니 오래되서 그런가.. 잘 기억이 나질 않는다.

 

따라서, 내용을 복기할 겸 정리를 해보고자 한다.


우선,

UML Diagram 인가 무엇인가?

 

Unified Modeling Language 의 약자로 OMG 에서 표준으로 채택한 통합 모델링 언어 이다.

즉, 모델을 만들 때 사용하는 표준 언어라고 생각하면 된다.

 

UML Diagram 의 종류로는 크게 구조 다이어그램, 행위 다이어그램 으로 나뉘어 지며, 각 종류마다 다양한 다이어그램이 존재한다.

  • 구조 다이어그램(Structure Diagram) : Class Diagram, Object Diagram, Component Diagram, Package Diagram, etc ..
  • 행위 다이어그램(Behavior Diagram) : UseCase Diagram, Sequence Diagram, Activity Diagram, etc ...

UML 다이어 그램의 종류는 상당히 많지만, 우선 가장 많이 사용한다고 생각되는 구조 다이어그램의 한 종류인 Class Diagram 에 대하여 알아보려고 한다.


클래스 다이어그램(Class Diagram) 은

클래스의 구성요소 및 클래스간의 관계를 표현할 수 있으며, 이를 통해 시스템의 전체 또는 일부 구조를 나타내는데 사용한다.

이를통해 클래스간의 의존 관계를 명확히 나타내주기 때문에 순환 의존이 발생하는 지점을 찾아 이를 해결할 수 있는 방법을 탐색하는 것에 도움을 준다.

 

클래스 다이어그램은 크게 추상적인 개념을 기술하기 위해, 완성된 소프트웨어의 구현 설명을 위해 사용하며, 각각의 목적에 따라서 구현하는 방식이 차이가 있다.

우리가 보통 생각하는 클래스 다이어그램은 소프트웨어의 구현 설명을 위한 목적으로 그려진것을 의미한다고 생각하면 된다.

 

StarUML 을 사용하여 그린 Class Diagram

이와 같이 대략적인 구조만 그려두는 것개념 설명을 위한 클래스 다이어그램이라고 할 수 있다.

 

PlantUML Plugin 을 사용하여 그린 Class Diagram

 

그리고, 이와 같이 상세하게 구현에 대한 설명이 되어있는 클래스 다이어그램이 우리가 흔히 생각하는. 완성된 소프트웨어의 구현 설명을 목적으로 한 클래스 다이어그램이다.


클래스 다이어그램을 그릴 때는 다이어그램의 기본 요소, 관계 표현 등 숙지하고 있어야 하는 항목들이 있다.

접근 제어자

클래스 다이어그램에도 접근 제어자에 대하여 표현이 가능하다.

  • public : +
  • private : -
  • protected : #

속성 값이나 메서드를 작성할 때 가장 처음에 위의 접근 제어자에 해당하는 기호를 붙여주는 형식으로 사용한다.

 

형식

속성 값이나, 메서드를 작성할 때 간단한 규칙이 존재한다.

  • 속성 값
    • (접근제어자)속성이름: 속성타입 = 기본값
    • ex) +text: String = ""
  • 메서드
    • (접근제어자)메서드이름(파라미터 타입): 리턴 타입
    • ex) -setText(String)
    • ex) #getText(): String

관계 표현

클래스 간의 관계를 표현할 때, 관계의 종류에 따라서 다른 방식으로 표기를 해야한다.

이처럼 7개의 표기 방식이 존재하지만,

집합과 합성의 경우 연관이랑 비슷하게 사용되고 있으며 사용 용도의 차이가 모호하기 때문에 필자는 집합과 합성의 경우 사용하지 않는 것이 좋을 것 같다고 생각했다.

(이와 관련해서 예전에 논란이 있었다고도 하니 말이다.)

 

위의 표기에 대해서 각각 간단하게 설명 하자면,

  • Generalization(일반화) : 상속을 표현.
  • Realization(실체화) : Interface 를 구현하는 등 실제 구현
  • Dependency(의존) : 대상 클래스의 객체를 사용하거나, 객체를 리턴받아 사용하는 경우.
  • Association(연관) : 다른 객체의 참조를 가지는 경우. 방향성이 있는 경우 Directed Association(직접 연관) 처럼 화살표를 넣는다.

위의 설명을 토대로,

안드로이드 스튜디오에서 PlantUML 이라는 Plugin 을 사용하여 클래스 다이어그램을 작성해 보았다.

 

클린 아키텍처 관련한 예제를 기반으로 작성한 클래스 다이어그램의 일부이다.

 

우선, 위의 다이어그램의 속성 값들을 확인해보면

  • 빨간색 네모가 private
  • 초록색 동그라미가 public
  • 노란색 마름모가 protected

의 접근 제어자를 가지고 있으며,

  • 내부에 색이 채워져 있는 것은 Method,
  • 그렇지 않은 것은 속성 값

이라고 생각하면 된다.

 

 

PlantUML 을 사용하여 작성한 .puml 파일의 일부이다.

 

@startuml ~ @enduml 을 사용하여 해당 어노테이션 내부에 작성된 코드들만 UML 다이어그램을 자동으로 만들어 준다.

@startuml 보다 먼저 작성된 부분은 다이어그램을 그릴 때 어떤 기호를 사용해야 원하는 관계를 표현해야 하는지에 대하여 자세히 나와있지 않아서, 필자가 이것저것 넣어보면서 확인하여 작성해둔 부분이기 때문에 참조를 위해 작성한 것이다.

 

위에 작성한 규칙을 만족하도록 코드가 작성되어 있기 때문에 이해하는 것에는 크게 문제가 없을 것이다.

Method 를 표현한 방식에서, 일반적인 코드와 동일하게 변수명: 변수타입 = default 형식으로 선언해도 문제가 없기 때문에 위와 같은 방식으로도 표기해 보았다.

 

일반적인 // 를 사용하여 주석을 표기하는 방식이 아닌, 작은 따옴표(') 하나를 사용하여 주석을 표시할 수 있기 때문에, 위처럼 주석도 추가해 보았다.

 

클래스 다이어그램에 작성할 클래스들을 위의 코드처럼 작성하고,

클래스 명들을과 관게 표현 표기 방법을 사용하여 클래스 간의 관계를 표현해주면 자동으로 위의 클래스 다이어그램이 그려지게 된다.


아직 관계 표현에 대하여 완벽하게 개념이 잡히지 않은 상태에서 예제를 만들었기 때문에 정확하지 않을 수 있다.

 

하지만, 확실히 다이어그램을 작성하게 되면 가시적으로 클래스 간의 관계를 파악할 수 있고, 어떤 흐름으로 흘러가는지에 대해 알 수 있다는 장점이 있는 것 같다.

 

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

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 - UseCase Diagram  (0) 2022.02.18