캡슐화와 정보은닉의 개념이 헷갈릴수가 있다. 아래의 예를 통해서 캡슐화를 알아 보자


class Key

{

public:

void Key() 

{

cout<<"키를 꼽습니다."<<endl;;

}

};

class StartButton

{

public:

void Button()

{

cout<<"시동 버튼을 누릅니다."<<endl;

}

};

class Car

{

public:

void TakeKey(Key &key);

void TakeStartButton(StartButton &button);

};


int main(void)

{

Key key;

StartButton button;


Car car;

car.TakeKey(key);

car.TakeStartButton(button);


return 0;

}


위 코드는 간략하게 자동차 시동을 켜는 방법을 클래스다. 그러나 위 예제가 캡슐화가 무너진 대표적인 예다. 왜냐 하면 자동차는 항상 키,시동버튼 행동을 포함 하게 된다. 또한 눈으로 확인 가능 하기가 어렵다.


따라서 아래 코드 처럼 변경 하면 좋다.


class Key

{

public:

void Take() 

{

cout<<"키를 꼽습니다."<<endl;;

}

};

class StartButton

{

public:

void Take()

{

cout<<"시동 버튼을 누릅니다."<<endl;

}

};


class CarStart

{

private:

Key key;

StartButton btn;


public:

void Take()

{

key.Take();

btn.Take();

}

};


class Car

{

public:

void TakeCarStart(CarStart &start)

{

start. Take();

}

};

int main(void)

{

CarStart carStart;

Car car;

car. TakeCarStart(carStart);


return 0;

}


여기서 가장 중요한 것은 캡슐화의 범위를 결정 하는 일이 쉽지 않다는 것이다. 






+ Recent posts