2014년 4월 22일 화요일

UML 클래스 다이어그램


여러 책이나 자료들을 접하다 보면 클래스 다이어그램의 표기가 조금씩 틀려서 종종 헷갈리는 경우가 있어 정리한다. 이 블로그의 포스팅에 등장하는 클래스 다이어그램은 이 포스팅에 정리된 내용을 따른다.

Generalization

클래스의 상속관계를 의미한다.

그림 1 - Generalization

Realization

인터페이스의 구현을 의미한다.

그림 2 - Realization

Aggregation

다른 클래스를 참조하는 경우인데, 그 참조가 멤버변수로 유지되는 경우을 의미한다.

그림 3 - Aggregation

Composition

다른 클래스를 참조하는 경우인데, 그 참조가 멤버변수로 유지된다는 점은 동일하다. Java에서는 이 다이어그램을 사용하기가 애매한 경우가 많다. C++와 같이 프로그래머가 메모리를 직접 관리해야 하는 경우는 많이 사용된다.

  • 그림 4 에서 Building 은 Address 을 소유하고 있다. 이때 Building 이 소멸될 때 Address 도 소멸해야 하는 관계이다.

    그림 4 - Composition
     
  • 그림 5 는 오브젝트 다이어그램(클래스 다이어그램이 아님)을 보여준다. Building1 과 Building2 는 동일한 Address1 을 소유할 수 없다. 만약 Building1 객체(인스턴스)가 복사되어야 하는 경우 Address1 도 얕은 복사(Shallow Copy)가 아닌 깊은 복사(Deep Copy)가 되어야 한다.
     
그림 5 - Illegal composition

Association

클래스 A가 클래스 B을 사용한다. 이때 클래스 B의 참조는 매개변수을 통해서 넘겨받거나 생성할 수 있다. 단, B에 대한 참조는 멤버변수가 아닌 지역적으로 유지된다.


그림 6 - Association

Inner Class

내부 클래스를 의미한다.

그림 7 - Inner Class


참고자료

  • UML for Java Programmers(Robert C. Martin)

댓글 없음:

댓글 쓰기