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변수는 그런 제한 없이 그냥 어떤 객체의 참조를 담는다.
객체 다이어그램은 시스템 실행중 어느 순간의 객체와 관계를 포착해서 보여준다. 한 순간의 메모리 상태를 스냅사진으로 찍어둔 것이라고 생각해도 좋다.
이 시퀀스 다이어그램은 TreeMap.add 메서드가 어떻게 구현되는지 기술한다. 허수아비는 알려지지 않는 메서드 호출자를 나타낸다.
대괄호[] 안의 불린 표현식은 '가드'라고 하며, 어떤 경로를 따라가야 할 지 알려준다. TreeMapNode 아이콘에 닿은 화살표는 '생성(construction)'이라고 하고, 이 경우에 이 데이터 토큰을 생성자의 인자를 나타낸다.
TopNode가 null이 아닐 경우를 보여주는 협력 다이어그램이다. 협력 다이어그램의 정보는 시퀀스 다이어그램에 담긴 정보와 똑같다. 하지만 시퀀스 다이어그램은 메시지를 보내고 받는 순서를 명확히 하는 목적인 반면, 협력 다이어그램은 객체 사이의 관계를 명확히 하는 것이 목적이다.
지하철 개찰구를 상태 기계로 표현한 것인데, 이 기계에는 locked과 unlocked이라는 상태가 있고, 두가지 이벤트를 받을 수 있다. coin(표) 이벤트는 사용자가 개찰구에 표를 넣었음을 뜻하고, pass(지나감) 이벤트는 사용자가 개찰구를 통해 지나감을 뜻한다.
이런 다이어그램은 시스템의 행동 방식을 파악할 때 굉장히 유용하다.
레퍼런스 : UML 실전에서는 이것만 쓴다. http://www.yes24.com/Product/Goods/4492519