일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스택
- 겨울카카오인턴
- tcp
- Network
- 백준
- 디자인패턴
- 파이썬
- 로버트마틴
- DesignPattern
- Collection
- 함수형 프로그래밍
- solid
- Collections
- javscript
- Rails
- exception
- JavaScript
- 람다 칼큘러스
- 큐
- lambda calculus
- Eclipse
- design-pattern
- functional programming
- 자바
- Spring
- Java
- Pattern
- Python
- 프로그래머스
- JDBC
Archives
- Today
- Total
개발자 노트
[보충설명] Object 관계에 대하여 본문
Object간 관계에 대하여
깨알 용어정리
- 부분 = part
- 전체 = whole
1. Association
정의
두 객체간 약한 관계를 의미합니다.
특징
- 하나의 객체가 사라진다고해서 다른 객체가 파괴되진 않습니다.
- 하나의 객체는 다른 객체에 속하지 않습니다.
UML 다이어그램
우측의 0..*
의 의미는 Person이 Hotel을 0개에서 복수개와 연관있을 수 있다는 의미입니다. 그 반대로, 좌측의 0..*
의 의미는 Hotel이 Person과 0개에서 다수개와 연관있을 수 있다는 의미입니다.
코드
public class Student {
public void play ( Sport sport) {
excute.play(sport);
}
}
이와 같이 Student-Sport간 객체 관계는 단순히 소비하는 관계가 됩니다.
2. Aggregation
정의
has-a relationship을 의미합니다. 다시말해, 전체가 부분을 가지며, 그 부분은 전체에 속합니다.
특징
관계가 약한 편에 속합니다.
부분이 전체에 속하더라도 전체에 독립적으로 존재할 수 있기 때문입니다.
승무원과 여객기를 예를 들면, 승무원이 없어도 서비스를 제공 못할 지언정, 여객기는 있을 수 있고, 여객기가 없어도 승무원은 있을 수 있습니다.
UML 다이어그램
- 죄측의 비어있는 다이아몬드는 Airliner가 전체라는 것을 의미합니다.
0..*
는 위와 해석이 동일합니다. Airliner 객체는 Crew가 없을수도 있고, 많을 수도 있습니다. 반대 또한 성립합니다.
코드
public class Airliner {
private ArrayList<CrewMember> crew;
public Airliner() {
crew = new ArrayList<CrewMember>();
}
public void add(CrewMember crewMember) {
}
}
- 이 코드를 잘 보시면 Airliner가 초기화될 당시 crew는 비어있습니다. 즉, 없어도 Airliner가 존재할 수 있다는 것을 의미하지요.
- 하지만 필드에 crew가 선언되어 있는 것을 보면 Airliner가 전체, crew가 부분이라고 보시면 됩니다.
3. Composition
정의
두 object간 아주 강한 관계를 의미합니다. strong has-a 관계라고도 불립니다.
전체는 부분이 없으면 존재할 수 없고, 부분 또한 전체가 없으면 존재할 수 없습니다.
특징
- part는 whole을 통해서만 접근이 가능합니다.
- 속한 부분은 전체에 대해 exclusive합니다.
- 아마... 이 부분의 의미는 부분은 전체에 대해 소유하지 않고, 로직 또한 수행하지 않는다는 의미 같습니다. AdapterPattern에서 Service가 Adapter에 대해 모른다는 의미와 일맥상통하는 것 같습니다.
UML 다이어그램
좌측의 채워진 다이아몬드는 2가지 의미를 가집니다.
- House가 전체이다 (전체)
- strong has-a 관계를 가진다. (채워짐)
우측의
1..*
의 의미는 House는 Room을 반드시 1개이상 가진다는 의미입니다.좌측에 아무런 숫자가 없는 이유는 Room은 House와 exclusive하기 때문이지요.
코드
public class House {
private Room room;
public House() {
room = new Room();
}
}
- House 생성 동시에 room이 생성됩니다. 반드시 room을 1개 가지고 있어야하기 때문이지요.
- 필드로 Room을 가지고 있는 것을 보시면, House가 전체인 것을 알 수 있습니다.
- room을 조작하려면 House내에서만, room의 메서드를 사용해야만 하겠지요.
반응형
'디자인패턴 > Structural Design Pattern' 카테고리의 다른 글
Facade Pattern (0) | 2020.10.12 |
---|---|
Decorator Pattern (0) | 2020.10.12 |
Composite Pattern (0) | 2020.10.12 |
Bridge Pattern (0) | 2020.10.11 |
Adapter Pattern (0) | 2020.10.11 |
Comments