간추린 UML – 2

다이어그램의 유형

정적 다이어그램(Static diagram)
클래스, 객체, 데이터 구조간 관계를 그림으로 표현해서 변하지 않는 논리적인 구조를 나타낸다.

동적 다이어그램(Dynamic diagram)
실행 흐름을 그림으로 그리거나 실체의 상태가 어떻게 바뀌는지 그림으로 표현한다.
소프트웨어 안의 실체가 실행 도중 어떻게 변하는지 보여준다.

물리적 다이어그램(Physical diagram)
파일, 라이브러리, 바이너리, 데이터등 물리적 실체와 관계들을 그림으로 표현한다.

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

오늘은 정적 다이어그램에서 클래스 다이어그램을 알아보자.
이름 그대로 클래스의 관계를 나타낸다.
소스 코드에 나타나는 호출, 상속, 구현체등등 클래스 사이의 의존 관계를 모두 표기할 수 있다.
일단 완전체는 아래와 같다.

간추린UML-클래스다이어그램-2.1

public class Dialer {
    private Vector digits;
    int nDigits;

    public void digit(int n);
    protected boolean recordDigit(int n);
}

오! 메소드부터 멤버 접근자까지 표기가 가능하다. 진짜 자세하다.
하나씩 세부적으로 살펴보자.

표기법

첫번째 칸은 클래스 명, 두번째 칸은 멤버 정보, 세번째 칸은 메소드 정보이다.
클래스 명은 일단 건너뛰고, 멤버와 메소드의 맨앞 기호의 뜻은 접근자를 뜻한다.

  • + : public
  • # : protected
  • – : private

멤버의 자료형은 콜론(:)뒤에 기재한다.

+money : Long

메소드를 보자. 리턴에 대한 자료형은 콜론(:)뒤에 기재한다.

+setMoney(money:Long):void
+getMoney():Long

자. 세부적인 설명은 이쯤에서 하고, 이런게 있구나하고 머리속에서 고이 접자. 이렇게 복잡하게 사용하면 ‘간추린 UML’이 아니라 ‘상세한 UML’이였을 것이다.

실무에서 이렇게 사용하지 않는다. 단순하게 클래스간 관계만 표기하면 된다. 모든 정보를 담아 놓으면 나중에 수정사항을 반영할 수 없기 때문이다.

실무에서는 그냥 네모(Reactangle)에 클래스명으로 작성하자. 설계에 사용하는 것이지 구현을 나타내는 것은 아니다.

간추린UML-클래스다이어그램-2.2

관계

연관

간추린UML-클래스다이어그램-연관

public class Phone {
     private Button sendBtn;
}

위처럼 클래스내에서 다른 클래스를 사용하는 것을 뜻한다. 그렇다면 하나가 아니라 여러개를 사용한다면?

간추린UML-클래스다이어그램-다수성

  • 숫자 : 멤버의 정확한 숫자
  • * 또는 0..* : 0개 또는 그 이상
  • 0..1 : 0개 또는 1개

상속

간추린UML-클래스다이어그램-상속

public class Button {
     ...
}

public class DialButton extends Button {
     ...
}

구현체(실체화)

간추린UML-클래스다이어그램-실체화

public interface ButtonListener {
     ...
}

public class ButtonListenerAdapter implements ButtonListener {
    ...
}

인터페이스(Interface)와 추상 객체(Abatract)

인터페이스와 추상 객체는 클래스명에 같이 표기한다.

인터페이스

간추린UML-클래스다이어그램-interface
위 그림처럼 클래스명 위에 <<interface>> 를 붙여주면 된다.

추상 객체

간추린UML-클래스다이어그램-abstract
추상객체도 별만 다른게 없지만 클래스명을 이탤릭 처리하면 된다.

최대한 간추린 클래스 다이어그램이다.
다음엔 더 간추려서 시퀀스 다이어그램을 소개하도록 하겠다.