이번 포스팅에서는 C++에서 구조체(struct)와 클래스(class)의 다형성에 대해 알아보겠습니다. 다형성은 객체 지향 프로그래밍에서 중요한 개념으로, 다양한 타입의 객체를 동일한 인터페이스를 통해 처리할 수 있게 해줍니다.
구조체와 클래스의 차이
우선, 구조체와 클래스의 차이를 간단히 알아봅시다. 구조체는 기본적으로 멤버 변수만을 가질 수 있고 메소드를 가질 수 없습니다. 반면, 클래스는 멤버 변수 뿐만 아니라 메소드도 가질 수 있습니다.
struct Point {
int x, y;
};
class Shape {
public:
virtual void draw() {
// draw shape
}
};
위 예제에서 보듯이, 구조체 Point
는 멤버 변수만을 가지고 있고, 클래스 Shape
는 draw
라는 메소드를 포함하고 있습니다.
다형성 구현하기
C++에서는 가상 함수(virtual function)을 활용하여 다형성을 구현할 수 있습니다. 이를 통해 서브 클래스에서 부모 클래스의 메소드를 오버라이딩하여 구현할 수 있습니다.
class Circle : public Shape {
public:
void draw() override {
// draw circle
}
};
class Square : public Shape {
public:
void draw() override {
// draw square
}
};
위 예제에서 Circle
과 Square
클래스는 Shape
클래스의 draw
메소드를 오버라이딩하여 각 도형에 맞는 그리기 동작을 정의하고 있습니다.
다형성 활용하기
이제 위에서 정의한 클래스들을 활용하여 동일한 인터페이스를 통해 다양한 도형을 그릴 수 있습니다.
void drawShapes(vector<Shape*>& shapes) {
for (const auto& shape : shapes) {
shape->draw();
}
}
위 예제에서 drawShapes
함수는 Shape
포인터를 원소로 갖는 벡터를 받아서, 각 도형을 그리는 역할을 수행합니다. 이를 통해 Circle
과 Square
객체를 동시에 처리할 수 있습니다.
결론
C++에서 구조체와 클래스를 이용하여 다형성을 구현하는 방법에 대해 알아보았습니다. 다형성은 유연하고 확장 가능한 코드를 작성하는데 중요한 개념이므로, 객체 지향 프로그래밍을 공부하거나 실무에서 활용할 때 유용하게 사용될 수 있습니다.