예제 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 관계 교정글을 마칩니다.