나중에 추가된 코드 때문에 기존 코드를 수정해야 한다?
유지보수 차원에서 문제가 될 수 있다!
따라서 코드를 작성할 때 확장성을 고려해야 한다.
객체지향의 SOLID원칙 중 OCP(개방폐쇄법칙)
- 기능 확장에는 열려 있고, 코드 수정에는 닫혀 있어야 한다.
- 새로운 기능이 추가되어도 기존 코드의 수정이 없어야 한다.
#include <iostream>
#include <string>
using namespace std;
struct ICamera
{
virtual void take() = 0;
virtual ~ICamera() {}
}
class Camera : public ICamera
{
public:
void take() { cout << "take picture" << endl; }
};
class HDCamera : public ICamera
{
public:
void take() { cout << "take HD picture" << endl; }
};
class People
{
public:
void useCamera(ICamera* cam) { cam->take(); }
};
class Animal
{
public:
virtual ~Animal() {}
protected:
Animal() {}
};
class Dog : public Animal
{
public:
Dog() {}
};
int main()
{
People p;
Camera c;
HDCamera hc;
p.useCamera(&hc);
}
- People이 ICamera가 아닌 그냥 Camera를 가지고 있으면 다른 카메라 종류를 가질 수 없으므로,
- People과 Camera는 강하게 결합되어 있다고 표현한다.
- People에 HDCamera를 추가하기 위해서는 HDCamera를 받는 코드를 새로 만들어주어야 한다.
- 하지만 Interface 개념을 도입해서 Camera가 어떻게 만들어져야 하는지에 대한 인터페이스를 만들고,
- People은 그 Interface를 받도록 하면 앞으로 어떤 카메라가 만들어지더라도 기존 코드의 수정이 일어나지 않는다.
제품을 먼저 만들지 말고, 제품의 인터페이스(규칙, 계약)을 먼저 설계하라!
'디자인 패턴 > [ecourse] C++ Design Pattern' 카테고리의 다른 글
4. State Pattern (0) | 2023.02.10 |
---|---|
3. Template Method & Strategy Pattern (0) | 2023.02.09 |
1. protected 생성자 & 소멸자 (0) | 2023.02.08 |
댓글