c++

C++ 추상 클래스와 인터페이스 활용법

개발에대해 2025. 9. 21. 14:28

 

C++ 추상 클래스와 인터페이스 활용법

C++ 객체지향 프로그래밍(OOP)에서 추상 클래스(Abstract Class)는 공통 인터페이스를 정의하고,

이를 상속받는 파생 클래스에서 구체적인 기능을 구현하도록 강제하는 중요한 도구입니다.

 

순수 가상 함수(pure virtual function)를 포함한 클래스를 추상 클래스라고 하며,

직접 객체를 생성할 수 없고 상속을 통해서만 사용 가능합니다.

 

1. 추상 클래스 기본

추상 클래스는 하나 이상의 순수 가상 함수가 포함된 클래스입니다.

순수 가상 함수는 `= 0`으로 선언하며, 자식 클래스에서 반드시 오버라이딩해야 합니다.


#include <iostream>
using namespace std;

class Shape {
public:
    virtual void Draw() = 0; // 순수 가상 함수
};

class Circle : public Shape {
public:
    void Draw() override { cout << "원 그리기" << endl; }
};

int main() {
    // Shape s; // 오류! 추상 클래스는 객체 생성 불가
    Shape* s = new Circle();
    s->Draw(); // 원 그리기 출력
    delete s;
}
  

 

위 예제에서 Shape는 추상 클래스이고, Circle은 Shape를 상속받아 Draw()를 구현했습니다.

 

2. 추상 클래스 활용 목적

  • 공통 인터페이스 정의: 다양한 파생 클래스가 동일한 함수를 제공하도록 강제
  • 다형성 구현: 부모 클래스 포인터로 다양한 자식 클래스 객체를 동일하게 처리 가능
  • 코드 유지보수성 향상: 새로운 클래스 추가 시 기존 코드를 수정하지 않아도 됨

 

3. 인터페이스 역할

 

C++에서는 순수 가상 함수만으로 구성된 클래스를 인터페이스(Interface)처럼 활용할 수 있습니다.

이를 통해 서로 다른 클래스 간의 공통 동작을 표준화할 수 있습니다.

 


class Drawable {
public:
    virtual void Draw() = 0;
    virtual ~Drawable() {} // 가상 소멸자
};

class Rectangle : public Drawable {
public:
    void Draw() override { cout << "사각형 그리기" << endl; }
};

 

Drawable 인터페이스를 상속받으면, Circle, Rectangle, Triangle 등 모든 도형 클래스가 Draw()를 구현해야 하므로, 일관성 있는 코드 작성이 가능합니다.

 

4. 주의사항

  • 추상 클래스는 직접 객체 생성 불가
  • 가상 함수를 포함한 클래스는 가상 소멸자 필요 → 부모 포인터로 자식 객체 삭제 시 메모리 누수 방지
  • 다중 상속 시 동일 순수 가상 함수의 중복 구현 주의
  • 인터페이스 용도만으로 사용하는 경우, 멤버 변수는 최소화 → 구현 부담 감소
 

마무리

C++ 추상 클래스는 OOP에서 핵심적인 설계 도구입니다.

순수 가상 함수를 통해 공통 인터페이스 정의다형성 구현을 가능하게 하며, 유지보수성이 높은 구조를 만들 수 있습니다.

특히 가상 소멸자와 인터페이스 활용을 적절히 사용하면, 확장성과 안전성을 동시에 확보할 수 있습니다.

추상 클래스와 인터페이스를 잘 활용하면, 다양한 객체를 일관성 있게 관리하고 코드 품질을 높이는 데 큰 도움이 됩니다.

반응형