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
104 ALM의 등장 배경, 오해와 진실 digipine 2017.10.28 377
103 ATmega8 MCU 간의 TWI 기능을 이용한 I2C 통신 digipine 2017.11.02 5998
102 AWS EC2 Ubuntu 용 Docker 설치 스크립트 digipine 2021.09.01 348
101 Bitbucket에서 SSH 키 등록하고 사용하는 방법 (맥/리눅스) file lizard2019 2023.06.22 950
100 C/C++ struct 패딩(padding) 원리 이해 lizard2019 2019.03.04 2150
99 Certbot으로 무료 인증서 발급 받기 digipine 2020.09.03 529
98 CMM / CMMI 란 무엇인가? digipine 2017.10.28 2467
97 Compile FFmpeg on Ubuntu, Debian, or Mint digipine 2017.11.02 327
96 Docker Compute Engine Ubuntu에서 Docker 설치 방법 lizard2019 2021.04.15 463
95 Docker 모든 컨테이너를 Stop 또는 Remove 하는 방법 digipine 2021.09.01 202
94 Docker에서 Phabricator 최신버전 설치 및 버전 확인 방법 file lizard2019 2021.04.15 1403
93 FFServer RTSP Audio Server Config digipine 2023.05.12 240
92 FFT (Fast Fourier Transform) 고속 푸리에 변환 예제 소스 digipine 2017.10.29 12548
91 gcc thread and mutex 사용법 lizard2019 2019.02.27 1200
90 Git Commit 취소 관련 명령어 정리 1 digipine 2017.11.02 1327
89 Git Commnd 사용법 정리 digipine 2017.11.02 264
88 Git Http Backend Upload Size 설정 - Http 500 Error 해결 digipine 2017.11.02 2074
87 Git 서버 구축 - 우분투[Ubuntu] digipine 2017.11.02 307
86 git 환경 설정 및 명령어 정리 digipine 2017.11.03 425
85 Golang Channel 사용법 정리 digipine 2021.10.22 414
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6