Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

집합관계 본문

Design Pattern/References

집합관계

defacto standard 2017. 10. 28. 17:42

집합 관계

UML 연관 관계의 특별 경우로 전체와 부분의 관계를 명확하게 명시하고자 할 때 사용.

집약과 합성 두 종류의 집합 관계가 존재.

has a 관계


집약 관계는 한 객체가 다른 객체를 포함하는 것을 나타낸다. '전체', '부분'과의 관계며 '전체'를 가리키는 클래스 방향에 빈 마름모로 표시한다.

 

특히 부분을 나타내는 객체를 다른 객체와 공유할 수 있는 경우에 집약 관계로 나타낸다.

이때 전체 객체의 라이프타임과 부분 객체의 라이프타임은 독립적이다. 즉, 전체 객체가 메모리에서 사라진다 해도 부분 객체는 사라지지 않는다.


합성 관계는 전체를 가리키는 클래스 방향에 채워진 마름모로 표시되며 부분 객체가 전체 객체에 속하는 관계다.

따라서 전체 객체가 사라지면 부분 객체도 사라진다. 공유할 수 있는 객체를 사용할 경우에는 합성 관계가 아닌 집약 관계를 사용한다.

이때 부분 객체의 라이프타임은 전체 객체의 라이프타임에 의존한다. 즉, 전체 객체가 없어지면 부분 객체도 없어진다.

집합관계

특징

Class Diagram

집약(Aggregation)

 전체 객체의 부분 객체의 생명 주기가 다르다.

 부분 객체를 여러 전체 객체가 공유할 수 있다.

합성(Composition)

 전체 객체가 없어지면 부분 객체도 없어진다.

 부분 객체를 여러 전체 객체가 공유할 수 없다.

 

집약 관계와 합성 관계의 구분을 위해 다음 코드를 표현하는 클래스 다이어그램을 그린다.

public class Computer {
private MainBoard mb;
private CPU c;
private Memory m;
private PowerSupply ps;

public Computer() {
this.mb = new MainBoard();
this.c = new CPU();
this.m = new Memory();
this.ps = new PowerSupply();
}
}

이 코드에서 생성자가 컴퓨터의 부품이 되는 Computer 객체들을 생성해 적절한 속성에 바인딩한다.

c1 = new Computer()로 Computer 객체가 생성되면 c1의 부품을 이루는 MainBoard, CPU, Memory, PowerSupply 객체들이 각각 생성된다.

이러한 부품 객체들은 Computer 클래스의 객체 c1이 사라지면 같이 사라진다.

 

즉, 부품 객체들의 라이프타임이 Computer 객체의 라이프타임에 의존하는 관계가 형성된다.

이는 집약 관계보다는 합성 관계로 모델링 한다.

public class Computer {
private MainBoard mb;
private CPU c;
private Memory m;
private PowerSupply ps;

public Computer(MainBoard mb, CPU c, Memory m, PowerSupply ps) {
this.mb = mb;
this.c = c;
this.m = m;
this.ps = ps;
}
}


Computer 객체가 사라져도 부품을 구성하는 MainBoard, CPU, Memory, PowerSupply 객체는 사라지지 않는다.

외부에서 이들 객체에 대한 참조만 받아 사용했기 때문이다.

 

즉, 전체를 표현하는 Computer 객체의 라이프 타임과 부분 객체의 라이프타임은 무관하다.

따라서 집약 관계를 사용하여 모델링하는 것이 적당하다.

 


*집약 관계와 합성 관계를 구분하려면 전체 객체와 부분 객체의 라이프타임 의존성을 살펴보면 된다.


'Design Pattern > References' 카테고리의 다른 글

인터페이스, 실체화 관계  (0) 2017.10.28
의존관계  (0) 2017.10.28
일반화관계  (0) 2017.10.28
연관관계  (2) 2017.10.28
클래스, 관계, UML  (0) 2017.10.28
Comments