[c++] 구조체와 클래스의 다형성

이번 포스팅에서는 C++에서 구조체(struct)와 클래스(class)의 다형성에 대해 알아보겠습니다. 다형성은 객체 지향 프로그래밍에서 중요한 개념으로, 다양한 타입의 객체를 동일한 인터페이스를 통해 처리할 수 있게 해줍니다.

구조체와 클래스의 차이

우선, 구조체와 클래스의 차이를 간단히 알아봅시다. 구조체는 기본적으로 멤버 변수만을 가질 수 있고 메소드를 가질 수 없습니다. 반면, 클래스는 멤버 변수 뿐만 아니라 메소드도 가질 수 있습니다.

struct Point {
    int x, y;
};

class Shape {
public:
    virtual void draw() {
        // draw shape
    }
};

위 예제에서 보듯이, 구조체 Point는 멤버 변수만을 가지고 있고, 클래스 Shapedraw라는 메소드를 포함하고 있습니다.

다형성 구현하기

C++에서는 가상 함수(virtual function)을 활용하여 다형성을 구현할 수 있습니다. 이를 통해 서브 클래스에서 부모 클래스의 메소드를 오버라이딩하여 구현할 수 있습니다.

class Circle : public Shape {
public:
    void draw() override {
        // draw circle
    }
};

class Square : public Shape {
public:
    void draw() override {
        // draw square
    }
};

위 예제에서 CircleSquare 클래스는 Shape 클래스의 draw 메소드를 오버라이딩하여 각 도형에 맞는 그리기 동작을 정의하고 있습니다.

다형성 활용하기

이제 위에서 정의한 클래스들을 활용하여 동일한 인터페이스를 통해 다양한 도형을 그릴 수 있습니다.

void drawShapes(vector<Shape*>& shapes) {
    for (const auto& shape : shapes) {
        shape->draw();
    }
}

위 예제에서 drawShapes 함수는 Shape 포인터를 원소로 갖는 벡터를 받아서, 각 도형을 그리는 역할을 수행합니다. 이를 통해 CircleSquare 객체를 동시에 처리할 수 있습니다.

결론

C++에서 구조체와 클래스를 이용하여 다형성을 구현하는 방법에 대해 알아보았습니다. 다형성은 유연하고 확장 가능한 코드를 작성하는데 중요한 개념이므로, 객체 지향 프로그래밍을 공부하거나 실무에서 활용할 때 유용하게 사용될 수 있습니다.

참고 자료