[c++] 다형성의 예

다형성은 객체 지향 프로그래밍(OOP)에서 중요한 개념 중 하나로, 서로 다른 클래스들이 같은 이름의 메서드를 가질 수 있는 능력을 말합니다. 다형성은 각 클래스가 서로 다른 방식으로 동작하도록 허용하여 코드의 재사용성을 증가시키고 유연한 프로그래밍을 가능하게 합니다.

다형성에는 정적 다형성(static polymorphism)과 동적 다형성(dynamic polymorphism)이 있습니다.

정적 다형성

정적 다형성은 함수 오버로딩(function overloading)과 연관이 있습니다. 함수 오버로딩은 같은 이름의 함수를 매개변수의 타입이나 개수에 따라 다르게 정의하는 것을 의미합니다.

#include <iostream>

class Shape {
public:
    void draw() {
        std::cout << "Shape::draw() called" << std::endl;
    }
};

class Circle : public Shape {
public:
    void draw() {
        std::cout << "Circle::draw() called" << std::endl;
    }
};

int main() {
    Shape shape;
    Circle circle;
    
    shape.draw();   // Shape::draw() called
    circle.draw();  // Circle::draw() called

    return 0;
}

동적 다형성

동적 다형성은 가상 함수(virtual function)과 연관이 있습니다. 가상 함수는 파생 클래스에서 기본 클래스의 멤버 함수를 재정의할 수 있도록 합니다. 이때 함수 앞에 virtual 키워드를 붙여야 합니다.

#include <iostream>

class Shape {
public:
    virtual void draw() {
        std::cout << "Shape::draw() called" << std::endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Circle::draw() called" << std::endl;
    }
};

int main() {
    Shape* shape = new Circle();
    
    shape->draw();  // Circle::draw() called

    delete shape;

    return 0;
}

동적 다형성은 객체의 실제 타입이 실행 시간에 결정되므로, 실행 중에 동적으로 함수의 호출이 결정됩니다.

정리

다형성은 객체 지향 프로그래밍의 주요한 특징 중 하나로, 코드의 재사용성을 높이고 유연한 프로그래밍을 가능하게 합니다. 다형성을 통해 코드의 확장성을 증가시킬 수 있으며, 객체의 동작을 가독성 있게 관리할 수 있습니다.

참고 자료