uml의 관계 표시화살표 --------------------------------------------------------------------------------------------------

앞서 UML의 표시 관계도를 단순히 화살표로 하다 이번에 아답터패턴에서 각 생성이나 포함하고 있는 객체들에 대한 관계에 대해서 너무 명확하지 못하게 작성하고 있었던 것 같다.
이제부터는 좀더신경을 써보려고 인터넷을 뒤져서 짱오리님의 블로그에서 UML의 기본에 대해서 알아봤다.

클래스----------------------------------------------------------------------------------------------------------------------------

맨위부터 

1. 클래스명

2. 맴버변수

3. 맴버함수를 의미한다.


앞에 붙은 - +들의 의미는

+ public

- private

# protected


코드로 봐보자.


객체----------------------------------------------------------------------------------------------------------------------------


관계표현(Relationships)-------------------------------------------------------------------------------------------------------------------------


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


일반적인 의미의 연결 관계인 연관( association ) 관계.

전체와 부분을 나타내는  집합( aggregation )  관계.

다른 클래스의 재산을 물려받는 상속( inheritance ) 관계.

한 클래스가 다른 클래스에 영향을 미치는 의존( dependency ) 관계.


관계를 표현해 보면 다음과 같다.


의존( dependency )--------------------------------------------------------------------------------------------------------

association 과 dependency 를 구분짓는 가장 큰 기준은 ' 참조하는 클래스 인스턴스의 레퍼런스를 계속 유지하고 있느냐, 아니냐 '


표시방법


설명

A클래스는 C 클래스를 내부에 맴버를 가지고 있거나 참조하고 있다.

하지만 함수 내부의 지역적으로 사용하고 있으며 A클래스가 사라진다고 해서 C클래스가 사라지지는 않는다.


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


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 관계인 것이다.


즉 A클래스는 B클래스를 가지고 내부적으로 B클래스의 레퍼런스를 유지하지만 딱히 라이프사이클이 같거나 내부적으로 생성하고 있지는 않다.


상속( inheritance )--------------------------------------------------------------------------------------------------------


표기


설명

B클래스는 A클래스를 상속한다.


집합( aggregation )--------------------------------------------------------------------------------------------------------

설명

내부적으로 A클레스는 B클래스를 내부적으로 참조 하고 있지만

전체객체의 생성시기가 같을 필요도 없고 한쪽이 소멸된다고해서 나머지가 소멸되는 것은 아니다.

또한 컴퓨터의 모니터나 키보드는 언제든 다른 컴퓨터에 떼어주거나 혹은 파기될 수 있다.


구성( composition )--------------------------------------------------------------------------------------------------------


설명

A클래스는 B클래스를 가지고 있고 두 클래스의 라이프 사이클은 완전히 같다. A클래스가 사라지면 B클래스도 사라진다.


인터페이스( Interface )--------------------------------------------------------------------------------------------------------


설명
인터페이스는 자바와 C#에서 사용하는 개념으로 추후 설명한다.


Posted by JJOREG