본문 바로가기
디자인 패턴/[ecourse] C++ Design Pattern

2. 인터페이스와 커플링

by 헛둘이 2023. 2. 8.

나중에 추가된 코드 때문에 기존 코드를 수정해야 한다?

유지보수 차원에서 문제가 될 수 있다!

따라서 코드를 작성할 때 확장성을 고려해야 한다.

 

객체지향의 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

댓글