[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() {
        // 기본 구현
    }
};

추상 클래스는 인터페이스와는 다르게 인스턴스화할 수 없으며, 파생 클래스에서 상속받은 순수 가상 함수를 반드시 구현해야 합니다.

결론

인터페이스는 순수 가상 함수만을 갖는 클래스로, 다중 상속과 클래스 간의 결합도를 낮추는 데 유용합니다. 추상 클래스는 멤버 변수와 구현이 있는 메서드를 포함하며, 파생 클래스에게 공통된 동작을 강제하거나 제공합니다.

즉, 인터페이스는 클래스가 어떤 동작을 하는지를 정의하고, 추상 클래스는 동작의 구현을 공유하는 데 사용됩니다.

참고 자료