UML의 유용한 Diagram들
전통적인 Software Engineering입장에서 Software를 구현하는 절차는 사용자의 요구 사항을 분석 요구 사항을 분석(Analysis)하고 이를 설계 (Design)를하고 구현(Implementation)을 한다. 요즘은 대부분 객체 지향을 기반으로 Software를 구현하므로, 이를 객체 지양 분석 설계(Object Oriented Analysis and Design)라고 한다. 절차(Process)상으로는 여러가지 방법이 분분하게 많지만, Software의 구조의 설계를 위한 도구로서 UML을 많이 사용하고, 이 중에서 특히 Class Diagram과 Interaction Diagram으로는 Sequence Diagram을 활용하여 설계를 하는데 사용한다. State Diagram도 제공되는 경우도 있다.
Open Source로 제공되는 많은 Software 혹은 Module들도 복잡한 경우에는 Class Diagram을 제공하기도 한다. Android의 Multimedia Framework에 해당하는 Stagefright의 경우도, Googling해 보면 사람들이 작성해 놓은 Class Diagram[1]이 있다. Sequence Chart는 찾기 어렵다. Android Multimedia Framework와 관련된 State Diagram은 초기 부터 제공이 되었다. 이는 Media Player라 불리는 Application Interface를 이해를 돕기 위해서 지속적으로 제공 되고 있다 [2].
실무로 업무를 하게 되면 요구 사항을 바탕으로 개발을 하는 경우도 있지만, 기존 코드(Legacy Code)를 유지 보수 하거나 확장하는 작업을 하는 경우도 많다. 이렇게 되면, 자료가 잘 제공되는 경우도 있지만, 없는 경우도 많다. 내가 생각하기에 가장 기본적인 자료는 Class Diagram이다. 이는 Software의 기존 구조를 파악할 수 있는 조감도에 해당한다. 하지만, 동작의 상세를 제공하지는 못한다. State Diagram 혹은 Sequence Diagram이 있다면 동작에 관해서도 빠르게 이해할 수 있다. 이 자료들이 없다면, Class Diagram은 만들고 Sequence Diagram도 기본적인 정상 동작에 대해서 작성한다면, 빠른 이해에 도움이 된다.
여기서는 Class Diagram 에 대해서 여러 책에 있는 좋은 내용들을 정리해 보기로 하자. 우선은 Object Oriented Paradigm에 대해서는 이해를 한다고 생각한다. 적어도, Java 언어에 대해서는 공부하였다면, 어느 정도 이해할 수 있는 수준이라고 생각한다.
Object, Class 그리고 Syntax
UML@Classroom[3]에서는 내용이 쉽게 설명되어 있으며, Class의 Attribute와 Operation의 Syntax에 대해서 아주 자세히 그리고 도식화가 잘 되어 있다. Chapter 4가 Class Diagram을 다루고 있는데, 다음은 그 요약 내용이다.
아래 그림은 Object와 Class를 이용한 표기 방법의 예이다. 아래 가장 왼쪽은 :Person은 Class를 Instantiate하면 maxMiller가 된 것을 보여준다. 위의 상자에서는 maxMiller라는 Instance만 보여 주고, 내부 상세 Attribute는 숨기고 있다. 아래 그림의 가운데는 왼쪽 그림에서 Class 종류까지 기술하여 표현하고 있다. 가장 오른쪽은 무명(anonymous) 객체로 Instance의 이름은 없으 Class가 생성된 것을 표현하고 있다.
우리가 잘 알고 있는 Java 언어와 UML의 Class를 표현하는 방식을 병행해서 비교하면 아래와 같다. Course가 Class의 이름이 되고, name, semester, hours가 Attribute그리고, getCredits(), getLecturer(), getGPA()가 operation이 되는 것이다.
아래 그램에서 볼 수 있듯이, 3가지 방식으로 Class를 표현할 수 있다. (a)는 가장 단순히 표현하는 방식이다. 하지만, attribute와 operation의 상세 내용은 알 수 없다. 좀 더 정보를 포함한 것이 (b)이다. attribute와 operation의 내용을 볼 수 있지만, 각 속성들은 보여 지지 않는다. (c)가 가장 상세한 기술 방법이다. Java와 같은 언어로 Class의 뼈대(Skeleton)은 구현할 수 있다. Star UML[4]과 같은 UML Tool들은 이러한 Skeleton Code를 자동으로 생성해 주는 기능도 제공한다.
Attribute의 상세 Syntax는 아래와 같다. Visibility는 아래 테이블까지 추가해 두었으니 참고 하면 된다. Multiplicity는 Array를 표시하는 것으로 [min..max]형식으로 표시한다. 상위 제약이 없는 경우, *를 사용한다. [*]의 경우는 [0..*]와 같은 의미이다.
Property의 경우는 {readOnly, unique, non-unique, ordered, unordered}가 가능하다. 이 특징들을 조합하면 Attribute의 속성을 조정할 수 있다. 이를 표로 나타내면, 아래와 같다. 예를 들자면, Set의 경우는 일반적으로 정렬이 되지 않은 중복되지 않은 숫자의 모임이다.
|
{unique} |
{non-unique} |
{ordered} |
Ordered Set |
List |
{unordered} |
Set |
Multi-Set |
Opeattion에 대한 기술 방법은 아래와 같이 요약될 수 있다.
Class 간의 Relationship
이 부분은 Class를 연결 시키는 선들로 기술된다. 이 부분은 Learning UML[5]에서 아주 요약하고 있는 그림이 있다. Local Value 혹은 Parameter로 사용되는 경우는 Dependency 혹은 Association으로 표현이 된다. Aggregation과 Composition은 시나리오에 따라 달라지기는 하지만, 모두 Member로 활용되는 경우이다. Inheritance는 상속으로 구현된다. 좀더 명확한 구분을 하고자 한다면, 책을 더 보도록 한다.
Class Diagram Syntax를 포함한 Diagram 예
Applying UML and Pattern[6]에는 위에서 설명한 Syntax와 Relationship를 예로서 잘 표현하는 그림을 포함하고 있다. 이 그림을 이해한다면, 위에서 정리한 내용도 모두 이해한다고 볼 수 있다. 이 그림을 손으로 그려보거나, UML 툴을 이용해서 그려 보는 것도 Class Diagram의 Syntax와 Relationship 표기 방법을 이해하는데 도움이 된다. 여기서는 <<interface>>를 표시하여 함수만을 Abstract하는 Interface도 표시하고 있다는 것을 참고하자.
Reference
[1] Stagefright player and its class diagram: http://infectiousansh.blogspot.com/2010/09/stagefright-player-and-its-class.html
[2] Developers Documentation Media Player: https://developer.android.com/reference/android/media/MediaPlayer
[3] UML@Classroon: An Introduction to Oject-Oriented Modeling 2015 Springer
[4] Star UML: http://staruml.io/
[5] Kim Hamilton and Russel Miles, Learning UML 2.0, O'Reaily Apr. 2006
[6] Craig Larman, Applying UML and Patterns 3rd Ed, Addison Wesley Perofessional Oct, 2004
'Object-Oriented Design' 카테고리의 다른 글
UML 상세 설계: University 예제 (0) | 2019.06.23 |
---|---|
Design Pattern: Factory Method (0) | 2018.09.02 |
Refactoring: Bad Smell & Techniques (0) | 2018.08.26 |
Design Pattern 첫 번째: Object Oriented Principles (0) | 2018.08.25 |
UML 두 번째: Sequence Diagram (0) | 2018.08.25 |