삽질의 현장/- C++

#024_시(c)시(c)해서 C++?!_UML 클래스 다이어그램 관계

shovelman 2015. 7. 21. 22:32

안녕하세요 삽잡이입니다...


이번 시간에는 이전~~~ 시간에 포스팅하긴했는데...

막상 UML 다이어그램을 보니 또 헷갈려서....

이번에 확실히 잡고 가자는 취지로 

다시 한번 이번에는 좀 세세하게 포스팅을 해보려고합니다...


UML에 대한 소개는 이전에 했으니 생략...하겠습니다...

되도 않지만... 막 써놓은 저의 이전 UML 소개글을 살펴보고 싶으시다면...


" #006_시(c)시(c)해서 C++?!_클래스간의 관계 를 살펴셔도... 좋..을.. 듯.. 하하하....합니다...


자.. 아무튼...


클래스간의 관계에 대해 살펴보도록 하겠습니다...


좀... 드럽게 그렸지만... 이게 뭘까요?

바로, UML을 사용하여 개발하고자하는 프로그램을 설계한 것입니다...


근데 화살표로 표시하면 표시하지... 뭐 그리고 복잡한지...

이게 헷갈려서... 다시 한번 곱씹어보고자... 

개념을 머리에 쑤셔 넣고자... 사실... 이해하고자


이렇게 포스팅을 합니다... 지금부터 시작하지요~!


이리저리 화살표의 종류도 참 많습니다...

제가 사용하는 "Star UML" 이라는 프로그램에 UML 표기를 슬며시 가져왔습니다.





가장 일반적인 Generalization 에 대해서 알아보도록 하겠습니다...

일반화라고도 하며 정확한 의미에는 다소 차이가 있지만 상속, 파생과 연관 있다고 할 수 있습니다.


'is a' 관계가 성립 한다면 사용할 수 있습니다...

위의 설계 다이어그램을 보신다면 Place와 Ground, PX, Domitory 의 관계이지요...


Ground, PX, Domitory 들은 모두 공통점이 있습니다...

즉 장소... Place라는 공통점을 가지고 있습니다. 

따라서, 프로그래밍 언어에서 사전에 Place라는 공통적 분모를 가진 기반 클래스를 

가지고 있다가 필요시에 하나하나 만들 수 있죠...


아하... 일반화에 대한 표시를 할 때는    이런 표시를 하군요...



다음으로는 의존 관계 (Dependency)에 대해서 알아보도록 하겠습니다.

이는 어떤 클래스가 다른 클래스를 참조할 때 사용합니다...

한 남자가 한 여자에 의존을 하는거에요...

남자가 말하죠... ' 난 너없이 못살아!!!' 아 애처로운 사나이의 마음... 흙... 

예시가 적절한지는 모르겠으나... 이와 같이 단방향... 일때 사용합니다...


위의 설계 다이어그램에서는 TrainingSchool 에서 Soldier 을 생성하지요...

훈련소에서 군인을 양성하니... 훈련소 클래스가 군인 클래스를 참조하지요...

공급자인 훈련소는 군인이라는 속성을 배출합니다.... 

군인을 모르면 훈련소는 무의미하죠... 이해가 가셨는지요....

하나의 클래스가 다른 클래스를 사용하는 관계입니다~!


  요런 모양을 가지고 있습니다...



다음은 연관 관계에 대해서 알아보도록 하지요... 말그대로 연관이 있음을 표현하는 것입니다...

요렇게 생겨 먹었습니다...   

한쪽 클래스에서 다른 클래스를 참조할 수 있습니다...

화살표를 가진 직접 연관 같은 경우에는 단방향으로 연관이 있을 때 표현할 수 있습니다.

즉 참조를 당하는 쪽과 당하지 않는 쪽으로 나누는 것이죠...



다음으로 집합 관계과 구성 관계에 대해서 알아보도록 하겠습니다...

영어로 Composition (  ) 과 Aggregation(   ) 라고 하지요...

일반화 관계는 'is a' 관계를 가지고 있다고 정의한다면

집합과 구성 관계는 'has a' 관계를 가지고 있다고 할 수 있습니다.


Composition 관계는 생성과 소멸을 함께 할 때 사용합니다...

이전 포스팅에서도 말했지만, 

사람이 태어날 때 신체 장기들은 따로 따로 태어나지 않죠... 물론 죽을때도 말입니다...

이럴때는 Composition 관계를 사용하여 클래스의 관계를 표시할 수 있습니다...


Aggregation 관계와 같은 경우에는 생성과 소멸을 함께하지 않아도 될 때 사용하겠죠...

위의 설계 다이어그램을 통해 이해해보자면,

군인은 군대의 구성이지요.... 또한 장소(PX, 연병장, 생활관...)에 군인이 속해 있을 수 있죠...

하지만 군대가 무너진다고 군인이 없어지나요... (맞는말 같은데... 흠....)

PX가 없어질때 군인도 같이 사라지나요.... (헉... 맞는말 같아... ㅠㅠ)

아무튼... 이와 같이 구성 관계에 대해서 알아봤습니다...


마지막으로 하나 알아보지 않은 것이 있지요... 바로 실체화입니다... 

실체화... C++에서 interface라는 용어를 사용하는지 모르겠으나...

순수 가상 함수를 정의해두고 이를 실제 기능으로 구현할 때... 그 관계를 나타내고자 할 때

사용합니다....




다들 잘 알아보시려나요...

아무튼... UML에 익숙치 않은 삽잡이는... 한동안 또 보면서 저게 뭐지 하겠지요...

하지만... 뭔가를 만들기 전에 한번씩 만들어보며 

문서화를 꾸준히 시도해볼 생각입니다...

회사에서는 우선 만들어 놓고 그것을 기반으로 문서화를 거꾸로 한다는... 소문이 있던데...

그래도 지금은 난 학생이니까 >< 푸하하하...


뭔소린지... 아무튼... 

이상 삽잡이였습니다!