[c++] 추상 클래스와 인터페이스의 데이터 구조화 및 연동

C++에서 추상 클래스와 인터페이스는 데이터 구조화와 연동에 있어서 중요한 역할을 합니다. 이러한 개념들은 클래스와 객체 간의 관계를 정의하고, 다양한 형태의 데이터를 구조화하며, 인터페이스를 통해 다른 클래스와의 상호 작용을 지원합니다. 본 포스트에서는 추상 클래스와 인터페이스의 개념, 활용, 데이터 구조화 및 연동에 대해 살펴보겠습니다.

추상 클래스와 인터페이스

추상 클래스는 하나 이상의 순수 가상 함수를 포함하는 클래스로, 이들 함수는 구현이 없이 선언만 됩니다. 이때 해당 클래스는 인스턴스화 될 수 없으며, 파생 클래스에서 순수 가상 함수를 반드시 오버라이딩 해야 합니다.

인터페이스는 순수 가상 함수로만 이루어진 추상 클래스와 유사하지만, 멤버 데이터를 포함할 수 없으며, 순수 가상 함수만을 정의합니다. 인터페이스는 다중 상속과 관련이 있으며, 클래스가 여러 개의 인터페이스를 구현할 수 있습니다.

데이터 구조화

추상 클래스와 인터페이스는 데이터를 구조화하기 위한 용도로 사용될 수 있습니다. 예를 들어, 여러 클래스가 공통으로 사용하는 특정한 기능을 추상 클래스나 인터페이스에 정의하고, 각각의 클래스에서 이를 구현함으로써 코드의 재사용성을 높일 수 있습니다.

추상 클래스의 활용

class Shape {
public:
    virtual double area() = 0;
    virtual double perimeter() = 0;
};

class Rectangle : public Shape {
public:
    double area() override {
        return width * height;
    }
    double perimeter() override {
        return 2 * (width + height);
    }
private:
    double width;
    double height;
};

class Circle : public Shape {
public:
    double area() override {
        return 3.14 * radius * radius;
    }
    double perimeter() override {
        return 2 * 3.14 * radius;
    }
private:
    double radius;
};

인터페이스의 활용

class Printable {
public:
    virtual void print() = 0;
};

class Displayable {
public:
    virtual void display() = 0;
};

class Document : public Printable, public Displayable {
public:
    void print() override {
        // print the document
    }
    void display() override {
        // display the document
    }
};

연동

추상 클래스와 인터페이스는 다른 클래스들과의 연동에 사용될 수 있습니다. 예를 들어, 다형성(polymorphism)을 통해 여러 클래스 객체를 동일한 방식으로 다루거나, 인터페이스를 통해 다른 클래스들 간의 상호 작용을 촉진할 수 있습니다.

void printShapes(const std::vector<Shape*>& shapes) {
    for (const auto& shape : shapes) {
        shape->print();
    }
}

void displayDocuments(const std::vector<Displayable*>& documents) {
    for (const auto& document : documents) {
        document->display();
    }
}

결론

추상 클래스와 인터페이스는 C++에서 데이터를 구조화하고 연동하는데 중요한 역할을 합니다. 이러한 개념들을 적절히 활용하여 코드의 재사용성과 유지보수성을 높일 수 있으며, 다형성과 상호 작용을 통해 유연하고 확장 가능한 시스템을 구축할 수 있습니다.