sitelink1 http://blog.naver.com/hermet/220120846602 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

UML을 정리해 볼까 합니다.

 

UML은 기본적으로 객체지향 언어를 위해 고안된 모델링 언어입니다.

 

학창시절에 UML 2.0을 배웠었고 나름 열심히 익히긴 했었는데 실무에서는 사실 많이 쓰이진 않더군요.

 

사실 UML 룰을 정확히 따르는 것보단 프로젝트에 참여한 이들 간에 의사소통이 더 중요하죠. UML이 존재하는 궁극적인 이유도 의사소통이구요.

 

따라서,  정형화되어 있는 UML은 의사소통을 위한 하나의 표준을 제공하기도 하지만 반드시 그 룰을 지킬 필요는 없다고 봅니다. 좀 더 단순화된 방식으로 도형을 그리거나 그냥 낙서 수준으로 그림을 그리더라도 서로 간에 의사소통이 되면 그걸로 목적을 달성한 거니깐요.

 

UML은 기본적으로 객체지향 언어를 기반으로 디자인되어 있는데, 저는 때때로 현 프로젝트의 스케일을 가늠해 본다던지 구성도를 공유할 때 클래스 다이어그램을 이용하긴 합니다만...

 

UML을 배운지 오래되서 이제 기억도 가물가물한 지라 정리해 둘 겸 글을 작성합니다.

 

이를 위해 Free Software인 Start UML을 이용할거구요. 현재 5.0 버전이 배포되어 있네요.

http://sourceforge.net/projects/staruml/

 

참고로, UML은 2.4 버전까지 나왔구요.

http://www.omg.org/spec/UML/2.4.1/

 

 

Untitled.png

 

-UML 기본 구성 요소-

  

 

 

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

 

 

클래스 기본

 

 1.png

 

 

- 클래스 다이어그램 -

 

기본적으로 클래스 다이어그램은 세 파트로 구분됩니다.

 

1. 이름

2. 속성

3. 오퍼레이션

 

이름은 클래스 이름에 해당하고, 속성은 멤버 변수, 오퍼레이션은 멤버 함수가 되겠지요. 위의 클래스 다이어그램을 보면, 속성 및 함수에 +, #, - 부호가 붙어있는데 이는 접근 제어자를 의미합니다. c++ 로 따지면, public, protected, private를 의미하구요.

 

속성은 기본적으로 속성 이름(brandName, modelName, capacity...) 만 표기하기도 하지만, 콜론(:)을 붙여서 속성의 타입을 명시할 수도 있습니다. (brandName: String) 은 brandName의 속성이 String(문자열) 임을 나타내죠. 만약 속성에 기본값이 정의되어 있으면 이퀄(=) 을 붙여서 명시 가능합니다. brandName = "Laundatorium" 처럼요.

 

속성 및 오퍼레이션은 물론 생략이 가능합니다.

 

 

객체 (인스턴스)

 

다음은 클래스의 객체(인스턴스)를 표현한 예입니다.

 

2.png

 

 

-객체 다이어그램- 

 

 

 클래스 이름 앞에 객체 이름을 붙이고 : 구분자를 추가해 준 후 밑줄을 그으면 됩니다.

 

 myWasher : WashingMachine 이렇게요. 객체를 익명으로 표기하고자 하는 경우에는 : WashingMachine 만 기입해 줄 수도 있습니다.

 

 

리스트 생략

 

상황에 따라서 ... 을 이용하여 생략을 의미할 수도 있는데. 설명이 필요없는 속성이나 오퍼레이션의 경우에 적용할 수 있죠.

 

3.png

 

 

 

- ... 을 이용한 생략 -

 

 

리스트 구분

 

속성과 오퍼레이션을 일정 기준으로 구분하려면 스테레오타입을 이용할 수 있습니다. 스테레오타입은 거듭인용표(<< >>)로 표기하구요.

 

6.png

 

-스테레오타입을 이용한 리스트의 구분-

 

스테레오타입을 이용하면 클래스의 상태 및 동작을 이해하는데 도움이 되겠지요.

 

 

경로, 책임, 제약

 

다음은 클래스 다이어그램을 좀 더 확장하여 표기한 케이스 입니다.

 

4.png

 

-책임 및 제약-

 

클래스 다이어그램의 몸통의 마지막 칸에 클래스에 대한 설명(책임)을 추가하였고 capacity 우측에 값의 제약을 표기하였습니다. 제약을 통해 그 값이 가질 수 있는 범위를 나타낼 수 있겠지요. 클래스 이름의 왼편에는 더블 클론(::)을 이용하여 클래스의 경로(Design Model)를 지정해 주었습니다. 패키지 이름이나 namespace 가 붙을 수 있겠지요.

 

 

노트

 

다음은 클래스 다이어그램에 노트를 추가한 예입니다. 추가 설명이 필요한 경우에 적절하겠지요.

 

5.png

 

 

-노트 사용 예- 

 

 

 

 

2. 관계 (Relationship)

 

관계는 클래스간의 연관성을 이해하는데 도움을 줍니다.

 

 

상속

 

상속에서 클래스 계층도는 다음과 같이 표기할 수 있으며 상속받은 클래스의 속성과 오퍼레이션은 따로 기입하지 않아도 됩니다. 

 

7.png

 

 

 

 

 

-동물의 왕국을 표현한 클래스 계층도-

 

 

추상 클래스

 

추상 클래스의 경우에는 이름을 이탤릭체로 표기합니다.

 

8.png

 

 

 

 

-추상 클래스는 이탤릭체로- 

 

 

의존성 

 

만약 어떤 오퍼레이션이 다른 클래스를 의존할 경우 그 의존 관계를 점선 화살표로 표기합니다.

 

9.png

 

 

 

 

  -의존성 표기- 

 

 

displayForm(Form f); 은 인자로 Form을 요구하며 의존성을 갖겠죠.

 

 

 

3. 연관 (Aggregation)

 

연관은 콤포넌트 클래스가 갖는 클래스들의 관계를 표현할 때 유용합니다.

 

 

집합 연관

 

집합 연관은 하나의 클래스가 독립적은 다른 클래스들로 구성될 때 사용하며 비어있는 마름모로 표기합니다.

 

10.png

 

 

 

 

 -집합 연관-

 

Meal 이라는 클래스는 Soup 또는  Salad, Main Course, Desert로 구성될 수 있습니다. Soup나 Salad는 둘 중 하나만 포함되며 이를

--- { or } ---- 로 표기합니다. 또한 각 구성 클래스에 1이라는 숫자를 표기하므로서 Meal 클래스는 각 구성 클래스를 하나씩 포함함을 나타냅니다.

 

 

복합 연관

 

복합 연관은 각 구성 클래스가 독립적으로 사용될 수 없고 반드시 콤포넌트 클래스에 종속이 된 경우에 사용합니다. 예를 들어 테이블은 받침대와 네 개의 다리로 구성되는데 받침대와 네 개의 다리는 사실 독립적으로는 의미가 없고 오직 테이블을 위해서만 사용된다고 가정하면요. 복합 연관은 색이 채워진 마름모로 표기합니다.

 

11.png

 

 

 

 

-복합 연관- 

 

 

다리는 4개라는 점에 주목하세요.

 

 

 인터페이스와 실체화

 

인터페이스는 구현이 안되어 있고 틀만 제공되는 클래스로 볼 수 있는데요.  자바같은 경우 인터페이스가 직접 제공되고 c++ 경우 순수 가상 함수로 구성된 클래스로 볼 수 있습니다. UML에서는 인터페이스를  <<interface>> 로 표기하고 이의 구현관계를 점선 화살표를 표기합니다.

 

12.png

 

 

 

 

 -인터페이스와 실체화- 

 

 

 

참고: 초보자를 위한 UML 객체지향 설계 3판 (정보문화사)

[출처] UML (Unified Modeling Language)|작성자 Hermet

번호 제목 글쓴이 날짜 조회 수
63 [Selenium] 크롬 브라우저 실행 화면을 출력하거나 감추는 방법 황제낙엽 2024.05.05 0
62 [Selenium] 페이지 이동 함수 황제낙엽 2024.05.05 0
61 [Selenium] Chrome 실행 자동화 file 황제낙엽 2024.05.03 1
60 [Selenium] MS Edge 실행 자동화(RPA, Robotic Process Automation) file 황제낙엽 2024.05.02 17
59 [Selenium] Warning : Unable to find CDP implementation matching 124 황제낙엽 2024.05.02 0
58 프로젝트 WBS 예제 (Microsoft Project 2013) secret 황제낙엽 2021.05.12 0
57 WBS (Work Breakdown Structure) 황제낙엽 2020.06.18 35
56 프로젝트 진행 절차 file 황제낙엽 2020.05.21 58
55 BDD (Behaviour-Driven Development) 황제낙엽 2020.04.02 28
54 요구사항 개발과 요구사항 관리 요약(요구사항기술서 샘플) file 황제낙엽 2019.07.07 112
» 뒤늦게 정리하는 UML (Unified Modeling Language) 요약 file 황제낙엽 2017.03.29 458
52 StarUML™의 숨은 재미있는 기능 황제낙엽 2017.03.29 356
51 The Facade Pattern file 황제낙엽 2017.01.04 312
50 와블스 프로세스(Warbles Process) 황제낙엽 2016.07.17 237
49 비 개발자 출신이 스크럼 마스터가 될 수 있는가? 황제낙엽 2015.06.25 356
48 디자인패턴[Observer 패턴] 황제낙엽 2013.10.18 156
47 PMBOK 5판 이해관계자 관리의 이해 [1] file 황제낙엽 2013.08.23 1291
46 Validation and Verification file 황제낙엽 2013.08.23 117
45 이해관계자의 관리/이해관계자 분석 황제낙엽 2013.08.23 392
44 성공적인 HR 프로젝트의 비결: 이해관계자 분석 file 황제낙엽 2013.08.23 302