[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()
함수를 가상 함수로 선언하고 파생 클래스인 Circle
와 Square
에서 재정의하여 동작을 다르게 구현하고 있습니다.
이렇게 C++에서의 다형성은 코드의 재사용성과 유연성을 높여주는 중요한 개념입니다.
참고 문헌:
- https://en.cppreference.com/w/cpp/language/poly_morphism