반응형
- 강한 결합(Tightly coupling)
- 하나의 클래스가 다른 클래스를 사용할 때 서로의 이름을 직접 사용하는 것
- 교체 불가능하고 확장성이 없음
class Camera
{
public:
void take()
{
std::cout << "task picture" << std::endl;
}
};
class HDCamera
{
public:
void take()
{
std::cout << "task picture" << std::endl;
}
};
class People
{
public:
void useCamera(Camera* p) { p->take(); } // People이 Camera를 직접 접근
void useCamera(HDCamera* p) { p->take(); } // People이 HDCamera를 직접 접근
};
int main()
{
People p;
Camera c1;
p.useCamera(&c1);
HDCamera c2;
p.useCamera(&c2);
}
약한 결합(Loosely coupling)
- 하나의 클래스가 다른 클래스를 사용할 때 인터페이스(추상 클래스)를 사용하는 것
- 교체 가능하고, 확장성이 높음
// 사람과 카메라사이의 규칙 설계
// 모든 카메라는 ICamera 인터페이스를 구현 해야 함
class ICamera
{
public:
virtual void take() = 0;
};
class People
{
public:
void useCamera(ICamera* p) { p->take(); } // People이 공통 인터페이스(ICamera)로 접근
};
// 모든 카메라는 규칙을 지켜야 한다
class Camera : public ICamera
{
public:
virtual void take() override
{
std::cout << "task picture1" << std::endl;
}
};
class HDCamera : public ICamera
{
public:
virtual void take() override
{
std::cout << "task picture2" << std::endl;
}
};
int main()
{
People p;
Camera c1;
p.useCamera(&c1);
HDCamera c2;
p.useCamera(&c2);
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 가상 함수 테이블 (0) | 2019.05.12 |
---|---|
C++ 함수 바인딩(Function Binding) (0) | 2019.05.12 |
C++ 추상 클래스(Abstract Class) (0) | 2019.05.12 |
C++ 상속 예제(Polymorphism) (0) | 2019.05.12 |
C++ 오버라이드, 가상함수(Override & Virtual Function) (0) | 2019.05.12 |