[c++] 가상 함수와 인터페이스(interface)의 관계

가상 함수와 인터페이스는 C++ 프로그래밍에서 중요한 개념으로, 객체지향 프로그래밍의 다형성을 구현하는 데 사용됩니다. 이들은 서로 밀접한 관련이 있으며, 이 두 가지 개념에 대해 자세히 알아보겠습니다.

가상 함수

가상 함수는 클래스 계층 구조에서 다형성(polymorphism)을 지원하기 위해 사용됩니다. 부모 클래스에서 정의된 함수를 자식 클래스에서 다시 정의하고, 해당 함수가 호출될 때 실제 형식에 맞는 함수가 실행되도록 하는 기능을 제공합니다. 이를 통해 하나의 인터페이스로 다양한 클래스를 이용할 수 있고, 이는 객체지향 프로그래밍의 특징 중 하나인 상속과 연동됩니다.

class Base {
public:
    virtual void show() {
        cout << "Base\n";
    }
};

class Derived : public Base {
public:
    void show() override {
        cout << "Derived\n";
    }
};

위 예제에서 Base 클래스의 show 함수는 virtual 키워드를 사용하여 가상 함수로 선언되었습니다. 이후 Derived 클래스에서 show 함수를 오버라이딩하여 재정의하고 있습니다.

인터페이스와 가상 함수

C++에서는 인터페이스를 명시적으로 지원하지는 않지만, 추상 클래스를 이용하여 비슷한 기능을 구현할 수 있습니다. 추상 클래스는 순수 가상 함수를 포함하고 있는 클래스로, 이를 상속받는 클래스에서 해당 함수를 반드시 구현해야 합니다. 따라서 인터페이스와 비슷한 역할을 수행합니다.

class Printable {
public:
    virtual void print() = 0;
};

class Text : public Printable {
public:
    void print() override {
        cout << "This is a text\n";
    }
};

class Image : public Printable {
public:
    void print() override {
        cout << "This is an image\n";
    }
};

위 예제에서 Printable 인터페이스는 print 함수의 순수 가상 함수로만 구성되어 있습니다. 이후 TextImage 클래스에서 Printable을 상속받고, print 함수를 각각 구현하고 있습니다.

이처럼 C++에서 가상 함수와 인터페이스는 객체지향 프로그래밍에서 중요한 다형성 구현의 도구로 활용됩니다.

결론

가상 함수와 인터페이스는 C++에서 다형성을 구현하는 데 중요한 요소로 사용됩니다. 가상 함수를 이용하여 클래스의 다형성을 확장하고, 인터페이스를 흉내내는 추상 클래스를 이용하여 다양한 클래스를 사용할 수 있는 기능을 구현할 수 있습니다. 이러한 개념들을 잘 숙지하고 활용함으로써 유연하고 확장 가능한 코드를 작성할 수 있습니다.

참고 자료