[c++] 다형성

C++에서 다형성이란 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 다형성은 동일한 인터페이스를 통해 여러 가지 형태의 자료형을 다룰 수 있는 능력을 의미합니다. 이는 코드의 재사용성을 높이고 작업의 유연성을 제공하여 프로그램의 모듈성과 확장성을 향상시킵니다.

C++에서의 다형성은 주로 함수 오버로딩, 연산자 오버로딩, 가상 함수, 추상 클래스, 인터페이스 등을 통해 구현됩니다. 가장 널리 사용되는 방법으로는 가상 함수추상 클래스를 활용하는 것이 있습니다.

가상 함수를 사용하면 파생 클래스에서 기본 클래스에 정의된 함수를 오버라이드할 수 있습니다. 이를 통해 같은 형태의 인터페이스를 가진 여러 클래스를 하나의 타입으로 다룰 수 있게 됩니다. 또한, 추상 클래스를 사용하면 인터페이스만을 제공하고 실제 기능은 파생 클래스에서 구현하도록 할 수 있습니다.

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

#include <iostream>

// 추상 클래스 정의
class Animal {
public:
    virtual void makeSound() = 0;  // 순수 가상 함수 (추상 함수)
};

// 파생 클래스 정의
class Dog : public Animal {
public:
    void makeSound() override {
        std::cout << "멍멍" << std::endl;
    }
};

class Cat : public Animal {
public:
    void makeSound() override {
        std::cout << "야옹" << std::endl;
    }
};

int main() {
    Animal* ptr1 = new Dog();  // 다형성을 이용한 객체 생성
    Animal* ptr2 = new Cat();

    ptr1->makeSound();  // "멍멍" 출력
    ptr2->makeSound();  // "야옹" 출력

    delete ptr1;
    delete ptr2;

    return 0;
}

위 예제에서 Animal 클래스는 순수 가상 함수로써 추상 클래스로 정의되어 있고, DogCat 클래스는 이를 상속받아 makeSound 함수를 각각 오버라이딩합니다. main 함수에서는 DogCat 객체를 Animal 포인터로 다형적으로 다루고 있습니다.

다형성을 통해 코드의 유연성과 확장성을 높일 수 있으며, 객체 지향 프로그래밍에서 중요한 개념이므로 C++ 개발자에게는 필수적인 학습 주제입니다.

가상 함수와 추상 클래스에 대한 더 자세한 내용은 아래 자료를 참고하세요.

참고 자료: