728x90
반응형
추상 클래스란?
- 추상클래스는 순수가상함수를 포함한 클래스입니다. 순수가상함수를 포함하고 있기 때문에 인스턴스화 즉, 객체를 생성할 수 없는 클래스입니다. 추상 클래스는 파생클래스에게 상속되는 형태로 사용됩니다.
인터페이스란?
- 인터페이스는 구현없이 정의만을 해놓은 클래스입니다. JAVA와 C#은 Interface기능을 별도로 제공하지만 C++은 제공하지 않기에 추상 클래스를 순수 가상함수만으로 선언하여 Interface처럼 사용합니다.
인터페이스가 필요한 이유는?
- 위에 설명만 들을 경우 굳이 추상 클래스와 인터페이스를 분류해놓을 필요가 없어 보이지만, 인터페이스의 진가는 다중 상속을할 때 나타납니다.
#include <iostream>
using namespace std;
class AbstractA {
public:
void Print() { cout << "AbstractA" << endl; };
};
class AbstractB {
public:
void Print() { cout << "AbstractB" << endl; };
};
class Child : public AbstractA, AbstractB {
public:
};
int main()
{
Child child;
child.Print(); // Error
return 0;
}
위와같이 두 개의 클래스를 다중상속받았을 때 함수명이 겹칠경우 둘 중 어느 함수를 실행해야될지 몰라 오류가 나오는 경우가 있습니다. 이러한 상황을 미연에 방지할 수 있는것이 바로 Interface입니다.
#include <iostream>
using namespace std;
class InterfaceA {
public:
virtual void Print() = 0;
};
class InterfaceB {
public:
virtual void Print() = 0;
};
class Child : public InterfaceA, InterfaceB {
public:
void Print() override { cout << "Child" << endl; };
};
int main()
{
Child child;
child.Print();
return 0;
}
이렇듯 Interface방식으로 정의할 경우 다중상속으로 인해 생기는 문제접을 원천적으로 막아줄 수 있습니다.
반응형
'C++' 카테고리의 다른 글
[C++] 스마트 포인터의 사용법 (0) | 2022.12.14 |
---|---|
[C++] inline 함수의 장단점 (0) | 2022.12.12 |
[C++] 참조 변수 사용법 (0) | 2022.12.09 |
[C++] 캐스팅(Casting) 하는법 (0) | 2022.10.11 |
[C++] 일반 함수와 가상 함수의 차이점 & 가상 소멸자 사용 이유 (1) | 2022.10.06 |