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