logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

UML - 기본편 ( 기본 표기 형식 및 관계 표현법 )

by digipine posted Oct 28, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

Class 및 Class instance 의 기본 표기 형식 


Class 표기형식 

UML Diagram 중에서 가장 기본적인 표현 단위인 클래스의 표기형식을 알아보자.


 

 

+  :  public
-  :  private
#  :  protected


*  variables, methods 는 생략이 가능하나 class 이름은 반드시 명시해주어야 한다.

위의 class 를 소스코드로 표현하면 아래와 같다.



Class instance 객체의 표기형식 
 

 



Relationships( 관계 표현 )

서로 의미있는 클래스들의 관계에는 크게 4가지 종류가 있다.

일반적인 의미의 연결 관계인 연관( association ) 관계, 전체와 부분을 나타내는 집합( aggregation )  관계,

다른 클래스의 재산을 물려받는 상속( inheritance ) 관계, 그리고 한 클래스가 다른 클래스에 영향을 미치는

의존( dependency ) 관계가 있다.


이 중에서도 association  과 aggregation, composition 이 세가지 관계가 가장 헷갈릴 수 있는데 간략하게

정리를 해보자면 아래의 그림과 같다. 회색 부분이 각각의 관계를 구분짓는 기준이 된다고 볼 수 있다.


 


association 과 dependency 를 구분짓는 가장 큰 기준은 ' 참조하는 클래스 인스턴스의 레퍼런스를 계속

유지하고 있느냐, 아니냐 ' 이다. 아래의 소스 코드들을 보면서 이해해보자.

[ 소스 코드 1 ] dependency

 


[ UML ] dependency ( A ----> B )
 



[ 소스 코드 2 ] association


[ UML ] association ( A - > B )
 




◆ dependency( 의존 관계 )

클래스가 연관, 상속, 집합 관계로 엮여 있는 것은 아니지만, 한 곳이 변경되면 그것을 사용하는 다른 곳도

같이 변경해줘야 하는 관계를 표현할 때 주로 사용한다. 단, 주의해야 할 점은 association 과 달리 dependency

의 경우에는 클래스 인스턴스의 레퍼런스를 유지하고 있지 않다는 점이다. 레퍼런스를 계속적으로 유지하게

되면 이는 association 으로 표현해야 한다.

 

주로 다음과 같은 세 가지 경우에 의존 관계로 표현한다.

1. 한 클래스의 메소드가 다른 클래스의 객체를 인자로 받아 그 메소드를 사용한다.( 가장 일반적 )

2. 한 클래새의 메소드가 또 다른 클래스의 객체를 반환한다.

3. 다른 클래스의 메소드가 또 다른 클래스의 객체를 반환한다. 이때 이 메소드를 호출하여 반환되는 객체의
    메소드를 사용한다.





◆ association( 연관 관계 )


한 객체가 다른 객체와 연결되어 있음을 나타낼 때 그들을 연관관계로 지칭한다. 이러한 연관관계에서 중요하게
볼 점은 ' 연관 관계의 방향( navigability
 ) 과 멀티플리시티( multiplicity ) 이다.
 



양방향 연관 관계 : 연결된 클래스들이 서로의 존재를 알고 있다는 의미이다.

위의 UML 을 해석하자면 House 와 Person 클래스는 서로의 존재를 알고 있으며, 반드시 한 사람 이상이

House에 속해야 한다는 것을 뜻한다. 

 


단방향 연관 관계 : House 클래스는 Person 클래스의 존재를 알고 있지만, Person 은 House 클래스의

존재를 모르고 있다고 이해하면 된다. 이와 같은 경우는 House 클래스만 Person 클래스에 대한 참조값을

가지고 있고, Person 은 House 에 대한 어떠한 참조값도 가지고 있지 않는다. 


관계 표현을 나타낸 그림에서 보면 일반 연관과 특수 연관이라고 나뉘어 지는데, 특수 연관이라는 것은

임의로 만든 단어이다.  일반 연관이란 앞에서 살펴본 association 을 나타내며,  association 중에서도

' 부분과 전체 ' 로 나눌 수 있는 관계를 aggregation 과 composition 으로 묶어서 분류한 것이다.

aggregation 과 composition 은 모두 association 의 한 특별한 형태로 각각을 구분하는 기준은  ' life cycle 이

같느냐, 같지 않느냐 ' 이다. life cycle 이란 클래스 인스턴스의 생명 주기를 말하는 것으로 생성에서 소멸까지의

과정을 말한다. 즉, life cycle 이 같다는 것은 관계된 클래스 혹은 그 인스턴스의 생성과 소멸이 동시에 이루어

진다는 것을 뜻한다.

쉽게 예를 들어 표현하자면 모자와 안경을 쓴 사람을 놓고 보자. 현재 이 사람을 구성하고 있는 요소에는 눈, 팔,

다리와 같이 사람이 죽으면 같이 없어지는 요소들이 있고, 안경 모자와 같이 바꿔 사용할 수 있는 요소들이 있

다. 즉, 눈, 팔, 다리는 사람과 life cycle 이 같은 composition 관계 이고, 안경이나 모자는 aggregation 관계인

것이다. 이러면 이해가 좀 쉽게 갈라나? ^-^ 


[ 소스 코드 1 ] aggregation 
 


[ UML ] aggregation
 



[ 소스 코드 2 ] composition
 


[ UML ] composition
 



◆ 상속 관계 ( inheritance ) 

[ 소스 코드 ] 
 


[ UML ] inheritance
 



 interface

[ 소스 코드 ]

[ UML ]

  
 

List of Articles
No. Subject Author Date Views
24 Ubuntu Server OS 한국어 모드로 설치 후 서버 콘솔에서 한글 깨짐 해결 방법 digipine 2017.10.31 2246
23 [ubuntu, 우분투] sendmail 설치 digipine 2017.11.02 2317
22 CMM / CMMI 란 무엇인가? digipine 2017.10.28 2467
21 LibVLC 미디어 재생기 프로그래밍 방법 C++, QT 엉뚱도마뱀 2018.04.20 2504
20 초고속망 통신사 DNS 서버 주소 모음 - DNS 설정 digipine 2017.11.03 2630
19 WIN CE, GPS - NMEA protocol - GPS Virtual Driver digipine 2017.10.28 2829
18 Xcode 없이 맥에 '명령어 라인 도구(Command Line Tools)'를 설치하는 방법 엉뚱도마뱀 2018.12.26 2859
17 [Linux, OSX] pfctl - Packet FIlter Control 사용법 digipine 2017.11.02 3187
16 OpenAL 사용법 정리 1 digipine 2017.11.01 3398
15 [iOS] Bluetooth로 App을 백그라운드 모드로 실행는 방법 lizard2019 2020.02.11 3522
14 비밀번호 해쉬에 Salt(소금) 첨가하기 file 엉뚱도마뱀 2017.11.23 4273
13 난수발생기 개론 엉뚱도마뱀 2017.11.22 4314
12 공짜 무료 C/C++ 컴파일러들 file digipine 2017.10.28 4378
11 WinPCap과 Ethereal, Wireshark 을 이용한 스니핑(Sniffing) digipine 2017.10.29 5428
10 ATmega8 MCU 간의 TWI 기능을 이용한 I2C 통신 digipine 2017.11.02 5996
9 Phabricator 설치 가이드 우분투 16.04 기준 digipine 2017.11.02 6193
8 Photoshop CC 2018 한글 영문 변환 언어팩, 포토샵 언어변경 file 엉뚱도마뱀 2018.07.04 8531
7 FFT (Fast Fourier Transform) 고속 푸리에 변환 예제 소스 digipine 2017.10.29 12548
6 Linux init.d 에서 등록하기. 부팅 시 자동실행 설정 digipine 2017.11.03 12612
5 [Swift, MacOS] 맥 한글 파일명이 윈도우에서 자소 분리되는 현상 해결, NFD, NFC 엉뚱도마뱀 2018.12.11 20080
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6