UML에 관련하여 잘 정리된 위 링크의 포스팅을 정리하였다.
Class 표기형식
UML Diagram 중 가장 기본적인 표현 단위인 클래스 표기형식을 알아보자.
+ : public
- : private
# : protected
variables, methods는 생략이 가능하나 class 이름은 반드시 명시해주어야 한다.
Relationships (관계 표현)
클래스들의 관계는 4가지 종류가 있다. 일반적인 의미의 연결 관계인 연관 (association) 관계, 전체와 부분을 나타내는 집합(aggregation) 관계, 다른 클래스의 재산을 물려받는 상속(inheritance) 관계, 한 클래스가 다른 클래스에 영향을 미치는 의존 (dependency) 관계가 있다. association, aggregation, composition의 관계는 아래와 같이 정리된다.
association 과 dependency의 구분은 '참조하는 클래스의 인스턴스의 레퍼런스를 계속 유지하느냐, 아니냐' 이다.
[Dependency] (의존관계)
클래스가 연관,상속, 집합 관계로 엮어 있지 않지만, 한 곳이 변경되면 그것을 사용하는 다른 곳도 변경해줘야 하는 관계를 표현할 때 주로 사용한다. 단, 주의해야 할점은 dependency의 경우 클래스 인스턴스의 레퍼런스를 유지하고 있지 않는다. 레퍼런스를 계속 유지하게 되면 association으로 표현해야 한다.
다음의 세 가지 경우 의존 관계로 표현한다.
- 한 클래스의 메소드가 다른 클래스의 객체를 인자로 받아 그 메소드를 사용한다(가장 일반적)
- 한 클래스의 메소드가 다른 클래스의 객체를 반환한다.
- 다른 클래스의 메소드가 다른 클래스의 객체를 반환한다. 이때 이 메소드를 호출하여 반환되는 객체의 메소드를 사용한다.
[Association]
한 객체가 다른 객체와 연결되어 있음을 나타낼때 그들을 연관 관계로 지정한다. 이러한 연관관계에서 중요하게 볼 점은 연관 관계의 방향(navigability)과 멀티 플리시티(multiplicity) 이다.
양방향 연관 관계 : 연결된 클래스들이 서로의 존재를 알고 있다는 의미이다.
단방향 연관 관계 : House 클래스는 Person 클래스의 존재를 알고 있지만, Person은 House 의 존재를 모르고 있다고 이해하면 된다. 이러한 경우 House 클래스만 Person 클래스에 대한 참조값을 가지고, Person은 House 에 대한 어떠한 참조값도 가지고 있지 않는다.
연관과 특수관계
일반 연관이란 앞에서 살펴본 association 을 나타내며, association 중에서도 '부분과 전체'로 나눌수 있는 관계를 aggregation과 composition으로 묶어서 분류한 것이다. 둘다 모두 association의 한 특별한 형태로 구분하는 기준은 'life cycle 이 같느냐, 같지 않느냐' 이다. life cycle 이 같다는 것은 관련된 클래스 혹은 인스턴스의 생성과 소멸이 동시에 이루어진다는 것을 뜻한다. life cycle 이 같으면 composition 관계이고 life cycle이 다르면 aggregation 관계이다.