본문 바로가기
SWE/Learning Diary

UML

by S나라라2 2019. 8. 28.
반응형

 

Generalization(일반화) :

슈퍼(부모)클래스와 서브(자식)클래스간의 Inheritance(상속) 관계를 나타낸다. 

 

여기서 Generalization이란 서브 클래스가 주체가 되어 서브 클래스를 Generalize하는 것을 말한다.

반대로 슈퍼클래스를 서브클래스로 Specialize(구체화)하는 것

 

상속은 슈퍼 클래스의 필드 및 메서드를 사용하여 구체화하여 필드 및 메서드를 추가하거나

필요에 따라 메서드를 overriding(오버라이딩)하여 재정의한다.

 

또는 슈퍼클래스가 추상클래스인 경우에는 인터페이스의 메서드 구현과 같으 추상 메서드를 반드시 overriding하여 구현하여야 한다.

 

 

Realization(실체화) :

Realization은 interface의 spec(명세, 정의)만 있는 메서드를 오버라이딩하여 실제 기능으로 구현하는 것을 말한다.

 

Realization을 나타내는 표기법은 2가지가 있다.

첫 번째는 인터페이스를 클래스처럼 표기하고 스테레오 타입 <<interface>>를 추가한다.

그리고 인터페이스와 클래스 사이의 realize 관계는 점선과 인터페이스 쪽의 비어 있는 삼각형으로 연결한다.

 

두 번째는 인터페이스를 원으로 표기하고 인터페이스의 이름을 명시합니다. 그리고 인터페이스와 클래스 사이의 관계는 실선으로 연결한다.

 

 

Dependency (의존) :

클래스 다이어그램에서 일반적으로 제일 많이 사용되는 관계로서, 어떤 클래스가 다른 클래스를 참조하는 것을 말한다.

 

 

Association (연관), Directed Association (방향성 있는 연관) :

 

Association은 보통 다른 객체의 참조를 가지는 필드를 의미한다.

 

 

Aggregation (Shared Aggregation, 집합) :

Composition ( composite Aggregation)과 함께 Association 관계를 조금 더 특수하게 나타낸 것으로 Whole(전체)와 Part(부분)의 관계를 나타낸다.

Association은 집함이라는 의미를 내포하고 있지 않지만 Aggregation은 집합이라는 의미를 가지고 있다.

 

표기법은 위와 같이 whole 과 part를 실선으로 연결 후

whole쪽에 비어있는 다이아몬드를 표기한다.

part쪽에는 화살표를 명시하여도 되고 명시하지 않아도 된다.

aggregation의 다이아몬드가 이미 navigability의 방향을 표현하고 있기 때문이다.

 

그런데 코드를 보면 위에서 보았던 association의 코드와 똑같다.

Association과 Aggregation은 집합이라는 개념적인 차이는 있지만 코드에서는 차이를 구분하기 힘들다.

 

 

Compositon ( Composite Aggregation, 합성) :

Aggregation과 비슷하게 whole(전체)와 part(부분)의 집합관계를 나타내지만 

개념적으로 Aggregation보다 더 강한 집합을 의미한다.

 

Composition의 표기법 또한 위와 같이 Aggregation과 비슷하지만

다이아몬드의 내부가 채워져 있다는 점만 다르다.

 

그럼 Composition의 개념과 코드에서는 Aggregation과 어떤 차이가 있는지..

Composition은 Aggregation보다 강한 집합이라고 했다. 

여기서 강한 집합이란 part가 whole에 종속적이어서 part가 whole의 소유이다.

반면 Aggregation은 part가 whole에 독립적이어서 whole이 part를 빌려 쓰는 것과 비슷하다.

이러한 의미 때문에 Aggregation과는 다르게 명확하게 나타나는 점이 있다.

- 첫 번째, part를 가지는 whole 인스턴스가 part인스턴스의 전체 수명을 책임진다.

- 두 번째, part에 해당하는 인스턴스는 공유될 수 없다.

 

 

참조 : http://www.nextree.co.kr/p6753/

반응형