[c++] 다형성을 이용한 코드 재사용성

C++은 다형성(polymorphism)이라는 기능을 제공하여 객체 지향 프로그래밍에서 코드의 재사용성을 높일 수 있습니다.

다형성(Polymorphism) 개념

다형성은 같은 이름의 메서드나 연산자가 다른 형태의 인수를 받아 처리하는 능력을 의미합니다. 이로 인해 하나의 인터페이스를 통해 여러 클래스를 사용할 수 있게 됩니다.

가상 함수 (Virtual Function)

가상 함수를 사용하면 같은 이름의 함수를 서브 클래스에서 재정의할 수 있습니다. 따라서 기본 클래스 포인터를 사용하여 여러 서브 클래스의 객체들을 가리키고, 동일한 메서드 호출로 다양한 서브 클래스의 행동을 얻을 수 있습니다.

다음은 가상 함수를 사용한 예제 코드입니다.

class Shape
{
public:
    virtual void draw() const
    {
        // 기본 도형을 그리는 코드
    }
};

class Circle : public Shape
{
public:
    void draw() const override
    {
        // 원을 그리는 코드
    }
};

class Square : public Shape
{
public:
    void draw() const override
    {
        // 사각형을 그리는 코드
    }
};

int main()
{
    std::vector<Shape*> shapes;
    shapes.push_back(new Circle());
    shapes.push_back(new Square());

    for (const auto& shape : shapes)
    {
        shape->draw(); // 다형성으로 인해 각 도형에 맞게 그리기가 호출됨
    }
}

추상 클래스 (Abstract Class)

추상 클래스는 순수 가상 함수(순수 가상함수는 함수 본체가 없는 가상 함수)를 포함하고 있는 클래스입니다. 추상 클래스의 인스턴스는 만들 수 없지만, 추상 클래스 포인터를 이용해 실제 서브 클래스의 객체를 참조할 수 있습니다.

다음은 추상 클래스를 사용한 예제 코드입니다.

class AbstractShape
{
public:
    virtual void draw() const = 0;
    // 순수 가상 함수로, 하위 클래스에서 반드시 구현해야 함
};

class ConcreteShape : public AbstractShape
{
public:
    void draw() const override
    {
        // 구체적인 도형을 그리는 코드
    }
};

int main()
{
    AbstractShape* shape = new ConcreteShape();
    shape->draw(); // 다형성으로 인해 ConcreteShape의 draw가 호출됨
}

C++의 다형성은 코드의 재사용성을 높이고 유연한 프로그래밍을 가능케 합니다.

결론

다형성을 이용하면 고유한 기능을 유지하면서도 공통된 인터페이스를 사용하여 코드를 재사용할 수 있습니다. C++의 다형성은 객체 지향 프로그래밍의 중요한 기능 중 하나이며, 적절히 활용하면 보다 유지보수가 쉬우면서 확장 가능한 코드를 작성할 수 있습니다.

참조: cplusplus.com