[C++200제] 클래스 상속 1 Has-A 관계 (교정)

[C++200제] 클래스 상속 1 Has-A 관계 (교정)


안녕하세요. C++200제 저자 박준태입니다.

예제 115번 클래스 상속 1 Has-A 관계 예제와 설명글이 부족하여 추가로 글을 올리게 되었습니다. 115번 Has-A 관계를 보셨거나 볼 예정이라면, 이 포스트 예제와 설명글도 함께 봐주세요.


예제 소스


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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Building1
{
public:
    void Name() { cout << "노른자 위 좋은 건물" << endl; }
};
 
class BuildingOwner : public Building1
{
public:
    void MyBuilding() 
    {
        cout << "내 보물 : ";
        Name(); 
    }
};
 
int main(void)
{
    BuildingOwner envious;
    envious.MyBuilding();
 
    return 0;
}
cs


클래스 상속 관계 중 하나인 Has-A는 포함, 집합 관계라고 합니다. 위의 예제처럼 건물주는 건물을 보유했기에 건물주입니다. 사람이 건물을 보유하여 건물주가 된다는 논리는 타당하나, 건물이 사람을 보유한다는 논리는 틀립니다.


이렇게, 한 클래스가 다른 클래스를 포함, 소유하는 관계를 Has-A라고 합니다. 코드 재사용성을 위해 명백한 포함, 소유 관계를 정의하는 것이 필요합니다.


위의 예제에서 Building1 클래스를 Building2라 변경하고 건물 이름을 고쳐도 논리적으로 옳다는 사실은 변하지 않습니다. 이처럼 하나의 클래스, 한 묶음의 소스를 다시 사용하는 것을 코드 재사용성이라고 합니다. 코드 재사용성은 높을수록 좋습니다.


참조 객체지향 기법과 코드의 재사용 [링크]


코드의 재사용이란 무엇일까?


재사용되는 코드들에는 어떤 것들이 있을까요? 비주얼 베이직의 컨트롤, 같은 개념의 볼랜드 계열에서 말하는 컴포넌트들이 그러한 예들입니다.


[C++200제] 클래스 상속 1 Has-A 관계 (교정)[재사용성이 좋은 레고 블록]


예를 들면 버튼이 있는 프로그램을 제작할 때 기본적인 버튼의 기능에 대해선 신경 쓸 필요가 없고 각각의 버튼이 눌렸을 때의 할 일만 정의해주면 되는 겁니다. 이것이 가능한 이유는 누군가가 만들어 놓은 기본적인 버튼의 기능을 구현해 놓은 코드를 우리는 재사용 하면 되는 것이기 때문입니다.


그래서 코드의 중복성을 줄일 수 있다는 말입니다.


6~10 라인 : Building1 클래스를 선언하고, 상속 관계에 상관없이 Name()을 호출하면 "노른자 위 좋은 건물"이란 메시지가 출력됩니다.


12~20 라인 : Building1을 상속받는 클래스 BuildingOwner를 선언합니다. Building1을 상속받는 클래스는 늘어날 수 있습니다. 건물주(BuildingOwner)는 건물(Building)을 보유하므로 Has-A 관계는 성립합니다.


24~25 라인 : 건물주 객체를 만들고 결과를 출력합니다.


결과

내 보물 : 노른자 위 좋은 건물


이것으로 예제 115번 클래스 상속 1 Has-A 관계 교정글을 마칩니다.


[C++200제] 클래스 상속 1 Has-A 관계 (교정)

댓글(0)

Designed by JB FACTORY