[c++] 인터페이스와 추상 클래스의 비교
C++에서 인터페이스와 추상 클래스는 모두 추상화와 다형성을 구현하는 데 사용됩니다. 그러나 두 가지 개념 간에는 몇 가지 중요한 차이점이 있습니다.
1. 인터페이스
C++에서 인터페이스는 순수 가상 함수만을 포함하는 클래스입니다. 즉, 추상 메서드만을 가지며, 멤버 변수나 일반 메서드를 가질 수 없습니다. 인터페이스는 다른 클래스가 특정 메서드를 구현하도록 강제하는 데 사용됩니다. 일반적으로 다음과 같이 선언됩니다:
class Interface {
public:
virtual void doSomething() = 0;
virtual void doAnotherThing() = 0;
// ...
};
인터페이스는 클래스가 특정 동작을 제공하는 방법을 정의하는데 유용하며, 클래스 간의 결합도를 줄일 수 있습니다. 다중 상속에서 다수의 인터페이스를 구현할 수 있습니다.
2. 추상 클래스
추상 클래스는 순수 가상 함수 외에도 멤버 변수와 구현이 있는 메서드를 포함할 수 있습니다. 추상 클래스는 멤버들의 기본 동작이나 상태를 정의하며, 파생 클래스에서 이를 구현하도록 강제합니다. 일반적으로 다음과 같이 선언됩니다:
class AbstractClass {
public:
virtual void doSomething() = 0;
virtual void doAnotherThing() = 0;
virtual void doSomethingElse() {
// 기본 구현
}
};
추상 클래스는 인터페이스와는 다르게 인스턴스화할 수 없으며, 파생 클래스에서 상속받은 순수 가상 함수를 반드시 구현해야 합니다.
결론
인터페이스는 순수 가상 함수만을 갖는 클래스로, 다중 상속과 클래스 간의 결합도를 낮추는 데 유용합니다. 추상 클래스는 멤버 변수와 구현이 있는 메서드를 포함하며, 파생 클래스에게 공통된 동작을 강제하거나 제공합니다.
즉, 인터페이스는 클래스가 어떤 동작을 하는지를 정의하고, 추상 클래스는 동작의 구현을 공유하는 데 사용됩니다.
참고 자료
- C++ 인터페이스와 추상 클래스: https://www.geeksforgeeks.org/pure-virtual-functions-and-abstract-classes-in-cpp/
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs, Scott Meyers, 2005