UML - 다이어그램의 유형

런던행·2021년 1월 6일
0

UML

목록 보기
1/4
post-thumbnail

개요

UML의 주요 다이어그램은 세 종류로 나뉜다.

  • 정적 다이어그램 : 클래스, 객체 데이터구조와 이것들의 관계를 그림으로 표현해서 소프트웨어 요소에서 변하지 않는 논리적 구조를 보여준다.
  • 동적 다이어그램 : 실행 흐름을 그림을 그리거라 실체의 상태가 어떻게 바뀌는지 그림으로 표현해서 소프트웨어 안의 실체가 실행 도중 어떻게 변하는지 보여준다.
  • 물리적 다이어그램 : 소스 파일, 라이브러리, 바이너리 파일, 데이터 파일 등의 물리적 실체와 이것들의 관계르들을 그림으로 표현해서 소프트웨어 실체의 변하지 않는 물리적 구조를 보여준다.


이 다이어그램은 animal 과 dog라는 두 실체가 일반화(generalization) 관계로 연결된 것을 그림으로 보여준다. (개는 동물이다)

아래 코드는 간단한 이진트리 알고리즘을 바탕으로 맵을 구현한다.

public class TreeMap
{
  TreeMapNode topNode = null;
  public void add (Comparable key, Object value)
  {
    if (topNode == null)
      topNode = new TreeMapNode (key, value);
    else
      topNode.add (key, value);
  }
  public Object get (Comparable key)
  {
    return topNode == null ? null : topNode.find (key);
  }
}

class TreeMapNode
{
  private final static int LESS = 0;
  private final static int GREATER = 1;
  private Comparable itsKey;
  private Object itsValue;
  private TreeMapNode nodes[] = new TreeMapNode[2];
  public TreeMapNode (Comparable key, Object value)
  {
    itsKey = key;
    itsValue = value;
  }
  public Object find (Comparable key)
  {
    if (key.compareTo (itsKey) == 0)
      return itsValue;
    return findSubNodeForKey (selectSubNode (key), key);
  }
  private int selectSubNode (Comparable key)
  {
    return (key.compareTo (itsKey) < 0) ? LESS : GREATER;
  }
  private Object findSubNodeForKey (int node, Comparable key)
  {
    return nodes[node] == null ? null : nodes[node].find (key);
  }
  public void add (Comparable key, Object value)
  {
    if (key.compareTo (itsKey) == 0)
      itsValue = value;
    else
      addSubNode (selectSubNode (key), key, value);

  }
  private void addSubNode (int node, Comparable key, Object value)
  {
    if (nodes[node] == null)
      nodes[node] = new TreeMapNode (key, value);
    else
      nodes[node].add (key, value);
  }
}

클래스 다이어그램

이 다이어그램을 보면 TreeMap이라는 클래스가 있고, 이 클래스에 add, get이라는 public 메서드가 있다. 그리고 TreeMap이 topNode라는 변수로 TreeMapNode객체를 참조하며 모든 TreeMapNode는 nodes라는 컨테이너에 다른 TreeMapNode 인스턴스 두 개의 참조를 담아 두는 것도 알수 있다. 그리고 모든 TreeMapNode는 itsKey와 itsValue라는 변수로 또 다른 두 인스턴스도 참조한다. itsKey 변수는 Comparable인터페이스를 구현하는 인스턴스의 참조를 담으며, itsValue변수는 그런 제한 없이 그냥 어떤 객체의 참조를 담는다.

  • 사각형은 클래스를 나타내고, 화살표는 관계를 나타낸다
  • 이 다이어그램에서 모든 관계는 연관(association)이다, 연관은 한쪽 객체가 다른 쪽 객체를 참조하며, 그 참조를 통해 그 객체의 메서드를 호출하는 것을 나타내는 단순한 데이터 관계이다.
  • 연관 위에 쓴 이름은 참조를 담는 변수의 이름과 대응된다.
  • 화살표 옆에 쓴 숫자는 보통 이 관계를 맺음으로써 생기는 인스턴스의 개수를 나타낸다. 만약 이 숫자보다 1보다 크다면 어떤 컨테이너를 사용한다는 뜻인데, 컨테이너로 대개 배열을 사용한다.

객체 다이어그램


객체 다이어그램은 시스템 실행중 어느 순간의 객체와 관계를 포착해서 보여준다. 한 순간의 메모리 상태를 스냅사진으로 찍어둔 것이라고 생각해도 좋다.

시퀀스 다이어그램


이 시퀀스 다이어그램은 TreeMap.add 메서드가 어떻게 구현되는지 기술한다. 허수아비는 알려지지 않는 메서드 호출자를 나타낸다.
대괄호[] 안의 불린 표현식은 '가드'라고 하며, 어떤 경로를 따라가야 할 지 알려준다. TreeMapNode 아이콘에 닿은 화살표는 '생성(construction)'이라고 하고, 이 경우에 이 데이터 토큰을 생성자의 인자를 나타낸다.

협력 다이어그램

TopNode가 null이 아닐 경우를 보여주는 협력 다이어그램이다. 협력 다이어그램의 정보는 시퀀스 다이어그램에 담긴 정보와 똑같다. 하지만 시퀀스 다이어그램은 메시지를 보내고 받는 순서를 명확히 하는 목적인 반면, 협력 다이어그램은 객체 사이의 관계를 명확히 하는 것이 목적이다.

상태 다이어그램


지하철 개찰구를 상태 기계로 표현한 것인데, 이 기계에는 locked과 unlocked이라는 상태가 있고, 두가지 이벤트를 받을 수 있다. coin(표) 이벤트는 사용자가 개찰구에 표를 넣었음을 뜻하고, pass(지나감) 이벤트는 사용자가 개찰구를 통해 지나감을 뜻한다.

이런 다이어그램은 시스템의 행동 방식을 파악할 때 굉장히 유용하다.

레퍼런스 : UML 실전에서는 이것만 쓴다. http://www.yes24.com/Product/Goods/4492519

profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글