캡슐화와 정보은닉의 개념이 헷갈릴수가 있다. 아래의 예를 통해서 캡슐화를 알아 보자
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;
}
여기서 가장 중요한 것은 캡슐화의 범위를 결정 하는 일이 쉽지 않다는 것이다.