I. 구성요소간의 관계를 알려주는 UML 관계의 개요
가. UML 관계(Unified Modeling Language Relationship)의 정의
- UML 구성요소간의 연관관계, 의존관계, 일반화, 실체화 관계를 나타내기 위한 UML의 관계 표기법
나. UML 관계의 특징
특징 |
설명 |
의미표현 |
단순 표기법이 아닌, 사용하는 형식과 표기에 의미 내포 |
의사소통도구 |
개발자 및 사용자 간의 의사소통 수단으로 활용 |
범용성 |
개발 규모, 개발 프로세스, 언어에 관계없이 적용 가능 |
II. UML 관계의 구성도 및 구성요소
가. UML 관계의 구성도
- UML 3요소 중 사물(Things)과 다이어그램(Diagrams) 간의 의미 있는 연결을 지원하는 구성요소
나. UML 관계의 구성요소
대분류 |
소분류 |
표기법 |
설 명 |
연관관계 (Association) |
연관관계 (Association) |
-방향성 없는 실선 표기 -상호 인지 |
|
직접연관관계 (Direct) |
-참조하는 측만 인지 - Horse만 Person을인지 |
||
집합연관관계 (Aggregation) |
-전체 소멸 시 부분은 사용가능 |
||
합성연관관계 (Composition) |
-전체 소멸 시 부분도 소멸 |
||
의존관계 (Dependency) |
확장의존관계 (Extend) |
<<Extend>> |
-클래스 변화가 타클래스에 영향 -참조를 유지하지 않음 -선택적 확장하는 관계 |
포함의존관계 (Include) |
<<Include>> |
-클래스 변화가 타클래스에 영향 -참조를 유지하지 않음 -반드시 포함하는 관계 |
|
일반화관계 (Generalization) |
일반화관계 (Generalization) |
-자식이 부모의 속성 물려받음 - 클래스 다이어그램의 상속관계 |
|
실체화관계 (Realization) |
실체화관계 (Realization) |
|
-인터페이스와 구현클래스 관계 -부모의 불완전 행동을 자식이 구현 |
III. 연관관계와 의존관계의 비교
구 분 |
연관(Association) |
의존(Dependency) |
개념도 |
Player는 Asset을 영속적으로 사용 |
Player는 Die를 일시적으로 사용 |
설명 |
- 어느 한 객체가 다른 객체와 연결 - 집합 연관 관계, 복합 연관 관계 |
- 한 사물의 명세서가 바뀌면 그것을 사용하는 다른 사물에게 영향 (반대 성립 하지 않음) |
구현 예시 |
public class Asset { … }
public class Player { private Asset asset; public Player(Asset purchasedAsset) { this.asset = purchasedAsset; } }
|
public class Die { public void roll() { … } }
Public class Player{ Public void takeTurn(Die die) { die.roll(); } } |
IV. 일반화와 실체화
구분 |
일반화(Generalization) |
실체화(Realization) |
개념도 |
||
기호 |
||
개념 |
- Is-a 또는 kind-of 의 관계 - 상속 개념을 사용하여 공통구조 공유 - 클래스 관계의 구조화 - 일반화된 사물(Super)과 특수화된 사물(Sub)의 관계 |
- 인터페이스의 불완전한 행위(메소드)를 구현 - 두 가지 유형으로 분류 1. 인터페이스 클래스처럼 표기 후 스테레오타입에<<interface>>를 추가. 점선과 비어 있는 삼각형으로 표시 2. 인터페이스를 원으로 표기하고,인터페이스 이름을 명시함.인터페이스와 클래스 관계는 실선 표기 |
V. 집합연관관계와 합성연관관계의 비교
구 분 |
집합연관관계(Aggregation) |
합성연관관계(Composition) |
개념도 |
전체 소멸 시 부분 존재 Player가 소멸해도 Asset은 존재 |
전체 소멸 시 부분 소멸 Player가 소멸하면 Piece도 소멸 |
설명 |
- 하나의 객체에 여러 개의 독립 객체 구성 - 구성요소를 이야기함 |
- 집합연관관계보다 강한 관계로 구성 - 구성요소가 영구적인 구성 |
구현 예시 |
public class Asset { … } public class Player { private List assets = new ArrayList(); public void addAsset(Asset asset) { assets.add(asset); … } … } |
Public class Piece { … } Public class Player{ Private Piece piece = new Piece(); // piece인스턴스의 생명주기를 Player가 관리 … } |
댓글