[c++] 구조체와 클래스의 가상 상속의 순수가상 함수

C++에서 구조체와 클래스는 상속, 다형성, 가상 함수와 관련하여 유사한 동작을 합니다. 하지만 가상 상속과 순수 가상 함수 개념은 구조체와 클래스 간에 차이가 있습니다. 이번 포스트에서는 구조체와 클래스의 가상 상속과 순수 가상 함수에 대해 알아보겠습니다.

구조체와 클래스의 가상 상속

C++에서 구조체와 클래스 모두 가상 상속을 지원합니다. 가상 상속은 다이아몬드 문제(diamond problem)라고도 불리는 다중 상속 시 발생할 수 있는 충돌을 해결하기 위한 기술입니다.

가상 상속은 상속되는 클래스 앞에 virtual 키워드를 사용하여 정의합니다.

class Base {
public:
    // ...
};

class Derived : virtual public Base {
public:
    // ...
};

class AnotherDerived : virtual public Base {
public:
    // ...
};

class MultipleDerived : public Derived, public AnotherDerived {
public:
    // ...
};

위의 예제에서 DerivedAnotherDerived 클래스의 상속 방식에 가상 상속이 적용되었습니다. MultipleDerived 클래스는 이러한 가상 상속을 통해 Base 클래스를 한 번만 상속받게 됩니다.

순수 가상 함수

순수 가상 함수는 추상 클래스(abstract class)를 정의하기 위해 사용됩니다. 순수 가상 함수는 구현이 없는 가상 함수로, 파생된 클래스에서 이를 반드시 구현해주어야 합니다.

순수 가상 함수를 정의하기 위해서는 함수 선언 뒤에 = 0을 붙여야 합니다.

class AbstractBase {
public:
    virtual void pureVirtualFunction() = 0;
    // ...
};

위의 예제에서 pureVirtualFunction은 순수 가상 함수로, AbstractBase 클래스를 추상 클래스로 만듭니다.

구조체와 클래스의 가상 상속과 순수 가상 함수

구조체와 클래스 모두 가상 상속과 순수 가상 함수의 개념을 동일하게 지원합니다. 따라서 구조체와 클래스 간에 가상 상속과 순수 가상 함수를 활용하는 방법에는 차이가 없습니다.

이를 통해 C++에서 객체지향적인 설계를 할 때 구조체와 클래스를 유연하게 활용할 수 있습니다.

이상으로 구조체와 클래스의 가상 상속과 순수 가상 함수에 대해 알아보았습니다. 더 자세한 내용은 C++ 공식 문서나 관련 서적을 참고하시기 바랍니다.