nakka soft world !
추상클래스와 인터페이스 본문
추상클래스와 인터페이스
Interface
class Camera
{
public:
void startRecord() { cout << "Starting Record" << endl; }
void stopRecord() { cout << "Stop Record" << endl; }
};
class HDCamera
{
public:
void startRecord() { cout << "Starting Record HD" << endl; }
void stopRecord() { cout << "Stop Record HD" << endl; }
};
class Car
{
private:
Camera* pCamera = 0; // 강한 결합(tightly coupling) - 교체 불가능 함
public:
void setBlackBoxCamera(Camera* p) { pCamera = p; }
void startBlackBoxCamera() { pCamera->startRecord(); }
};
int main()
{
Car c;
Camemra cam;
c.setBlackBoxCamera(&cam);
c.startBlackBoxCamera();
HDCamera hdcam;
c.setBlackBoxCamera(&hdcam); // ?? 되나 ??.. hdcam을 쓰기 위해서는 Car Class의 변수등 바꿔야 함.
}
// 카메라 제작자와 자동차 제작자가 지켜야 하는 규칙을 설정 한다.
// 규칙 : 모든 카메라는 반드시 아래 클래스로부터 파생되어야 한다.
// -> 모든 카메라는 아래 인터 페이스를 구현해야 한다.
class IBlackBoxCamera
{
public :
virtual void startReord() = 0;
virtual void stopReord() = 0;
virtal ~IBlackBoxCamera() {};
};
class Car
{
private:
IBlackBoxCamera* pCamera = 0; // IBlackBoxCamera의 파생 class모두 받을 수 있음. 약한 결합.(loosely coupling) - 유연한 디자인
public:
void setBlackBoxCamera(IBlackBoxCamera* p) { pCamera = p; }
void startBlackBoxCamera() { pCamera->startRecord(); }
};
class Camera : public IBlackBoxCamera
{
public:
void startRecord() { cout << "Starting Record" << endl; }
void stopRecord() { cout << "Stop Record" << endl; }
};
class HDCamera : public IBlackBoxCamera
{
public:
void startRecord() { cout << "Starting Record HD" << endl; }
void stopRecord() { cout << "Stop Record HD" << endl; }
};
int main()
{
Car c;
Camemra cam;
c.setBlackBoxCamera(&cam);
c.startBlackBoxCamera();
HDCamera hdcam;
c.setBlackBoxCamera(&hdcam); // OK.
}
'프로그래밍언어 > C++' 카테고리의 다른 글
RTTI ( Rut Time Type Information ) , dynamic_cast (0) | 2017.03.27 |
---|---|
함수 바인딩과 가상함수의 원리 (0) | 2017.03.27 |
순수 가상 함수와 추상 클래스 (0) | 2017.03.27 |
가상 소멸자 ( virtual destructor ) (0) | 2017.03.27 |
객체 지향 디자인 (0) | 2017.03.27 |