[c++] 다형성(polymorphism)에 대한 개념 설명

C++에서 다형성은 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 다형성이란 하나의 인터페이스를 통해 여러 가지 형태의 동작을 수행할 수 있는 능력을 의미합니다. C++에서는 다형성을 가상 함수(virtual functions) 를 통해 구현합니다.

가상 함수는 기본 클래스의 멤버 함수를 파생 클래스에서 재정의할 수 있게 합니다. 이를 통해 같은 이름의 함수가 다른 동작을 할 수 있도록합니다. 예를 들어, “도형”이라는 기본 클래스가 있고 이를 상속받은 “원”, “사각형” 클래스가 있다면, 각 도형마다 다른 넓이를 계산하는 함수를 가상 함수로 정의할 수 있습니다.

다형성은 런타임 다형성과 컴파일 타임 다형성으로 구분됩니다. 런타임 다형성은 객체의 실제 타입에 따라 동작이 결정되는 것을 의미하며, 컴파일 타임 다형성은 템플릿 및 오버로딩을 통해 컴파일 시점에 다양한 동작을 처리하는 것을 의미합니다.

아래는 C++에서 다형성을 구현한 간단한 예제 코드입니다.

#include <iostream>

class Shape {
public:
    virtual void calculateArea() {
        std::cout << "Calculating area of generic shape" << std::endl;
    }
};

class Circle : public Shape {
public:
    void calculateArea() override {
        std::cout << "Calculating area of circle" << std::endl;
    }
};

class Square : public Shape {
public:
    void calculateArea() override {
        std::cout << "Calculating area of square" << std::endl;
    }
};

int main() {
    Shape* shape1 = new Circle();
    Shape* shape2 = new Square();

    shape1->calculateArea();  // 다형성에 따라 Circle 클래스의 calculateArea() 호출
    shape2->calculateArea();  // 다형성에 따라 Square 클래스의 calculateArea() 호출

    delete shape1;
    delete shape2;

    return 0;
}

위 코드에서 Shape 클래스의 calculateArea() 함수를 가상 함수로 선언하고 파생 클래스인 CircleSquare에서 재정의하여 동작을 다르게 구현하고 있습니다.

이렇게 C++에서의 다형성은 코드의 재사용성과 유연성을 높여주는 중요한 개념입니다.

참고 문헌: