객체 간에 관계를 맺는 방법 - 상속과 포함
포함
- 계층구조로 관계를 맺으면 – 상속( 생물학적 관계 X )
- 어떤 객체가 다른 객체를 멤버로 가지고 있으면 - 포함
- Composition - 합성 – 포함된 객체가 생명주기를 같이 하는 경우 – 강한 결합 - 포함관계
- Aggregation – 집합 – 포함된 객체가 생명주기를 달리 하는 경우 – 약한 결합 - 참조 관계
포함 - Compositon : 사각형의 점
1. Point - 포인터 클래스 만들기
- 점 ( . )이라는 것을 추상화 작업
- 2D공간상에 x값 y값 저장하는 부분 필요
2. Rectangle - 사각형 클래스 만들기
- 4개의 점이 아닌 - 2개의 점으로 넓이를 구한다.
- 우리가 필요한 선은 점 2개면 된다. - toppt, bottompt
20번 Line
- Rectangle 클래스에 Point 객체를 멤버로 가지고 있다. - 포함 ( Composition )
- Rectangle 객체가 생성될 때 같이 생성되고, 소멸될 때 같이 소멸된다 – 이런 관계를 Compositon
- Compositon - 합성 - 포함된 객체가 생명주기를 같이 하는 경우 - 강한 결합 - 포함 관계
다른 사례로 간단히 살펴보면
- human 클래스에 head객체를 멤버로 가지고 있다.
- human 객체 생성될 때 head 객체 생기고 -
- human 객체 소멸할 때 head 객체 같이 소멸한다.
포함 - Aggregation : 자동차와 바퀴
1. Car 클래스 만들기
2. Wheel 클래스 만들기
66번 Line
- Car 클래스에 Wheel 객체의 포인터를 멤버로 가지고 있다. - 참조 ( Aggregation)
- Car 객체의 생성과 소멸에 관련 없이, Wheel 객체는 생성, 소멸 따로 한다.– 이런 관계를 Aggregation
- Aggregation – 집합 – 포함된 객체가 생명주기를 달리 하는 경우 – 약한 결합 - 참조 관계
main에서 객체 생성한 뒤 - 생성자와 소멸자 Check
87번 Line - Rectangle 타입 rect 객체 생성
- 객체 생성 시 - Point 타입 2개가 생성되고 - Rectangle 객체 생성
- 객체 소멸 시 - Point 타입 2개가 소멸되고 - Rectangle 객체 소멸
- Rectangle 객체와 Point 객체가 생명주기를 함께한다. - Compositon
99번 Line - Car 타입 car 객체 생성
- 객체 생성 시 - 외부에서 만든 Wheel타입 wheel객체를 참조하여 생성
- 외부에서 Wheel 객체 만들 때 Wheel생성자 호출
- 내부에서 Car 객체 생성될 때 - Car 생성자만 생성되고 빠져나오면서 Car 소멸자만 호출
- 내부의 Car 객체와 상관없이 - Wheel 객체 소멸될 때 Wheel소멸자 호출
- Car 객체와 Wheel객체가 생명주기를 함께하지 않는다 - Aggregation
+@ 동적 객체일 경우 실습
115번 Line - 사각형 동적 객체 생성 - Rectangle* prect = new Rectangle;
118번 Line - 사각형 동적 객체 반납 - delete prect;
124번 Line - Wheel 동적 객체 생성 , 131번 Line - Wheel 반납
125번 Line - Car 동적 객체 생성, 128번 Line - Car 반납
동적 객체를 생성하는 경우에도
- Compositon 관계인 사각형의 점은 : 사각형 객체 생성 시 : 포인터 객체 생성자도 호출/ 소멸 시 소멸자 호출
- Aggregation 관계인 휠과 차는 : 휠 객체 생성 시 휠 생성자만 : 카 객체 생성시 카 생성자만 호출 / 소멸될 때도 각각 호출
review
객체 간 관계를 맺는 관계 포함에 관하여 학습하였다.
포함은 2가지로 구분!
한 클래스의 멤버로 다른 객체를 포함하고 있으면 - Compositon 관계 - 포함
한 클래스의 멤버로 다른 객체의 주소 값을 참조하고 있으면 - Aggregation 관계 - 참조
Composition 관계에서는 객체가 생성되고 소멸될 때 - 생성자와 소멸자 같이 호출
Aggregation 관계에서는 생성과 소멸되는 각자의 순간에 - 생성자 소멸자 호출
포함의 관계를 이용하여 더 다양한 방법으로 생성자를 만들 수 있었다.
만들어진 객체를 멤버로 받음으로써 코드도 더 간단해졌다.
내가 만든 클래스(A)의 멤버로 다른 클래스의 객체(B)가 있는데
나의 클래스(A)의 객체를 생성하려고 하는데
(B)가 반드시 필요한 경우에는 compositon관계로
(B)가 없어도 되거나 변경 가능한 상황에서는 aggregation 관계로
## check : 동적 객체로 생성, 소멸해보는 부분
'Back-end > C++' 카테고리의 다른 글
22. 03. 30 - 가상 함수, 함수 포인터, 함수 배열 (0) | 2022.04.07 |
---|---|
22. 03. 29 - 다중 상속, 다형성 : Overloading, Override (0) | 2022.04.06 |
22. 03. 25 - 상속( 접근 제어자, 업 캐스팅, 다운 캐스팅 ) (0) | 2022.04.03 |
22. 03. 24 - 상속(특수화) : 동물 육성 게임, string 클래스 기능 추가 상속 (0) | 2022.04.02 |
22. 03. 23 - 캡슐화, 상속(일반화) : 동물 육성 게임 (0) | 2022.04.02 |