[c++] 추상 클래스와 인터페이스의 설계 및 모델링 방법
안녕하세요! 오늘은 C++에서 추상 클래스와 인터페이스를 설계하고 모델링하는 방법에 대해 알아보겠습니다.
추상 클래스(Abstract Class)
추상 클래스는 하나 이상의 순수 가상 함수(pure virtual function)를 포함하는 클래스입니다. 이러한 클래스는 단독으로 인스턴스화될 수 없으며, 파생 클래스에서 구현되어야 합니다. 추상 클래스는 인터페이스 메서드와 함께 일반 데이터 멤버나 일반 멤버 함수도 포함할 수 있습니다.
class AbstractBase {
public:
virtual void interfaceMethod() = 0; // 순수 가상 함수
void normalMethod() {
// 일반 메서드 구현
}
};
인터페이스(Interface)
인터페이스는 순수 가상 함수로만 이루어진 추상 클래스입니다. C++에서는 C++20 표준부터 인터페이스를 명시적으로 정의할 수 있습니다.
class Interface {
public:
virtual void interfaceMethod() = 0; // 순수 가상 함수만 포함
};
추상 클래스 및 인터페이스의 모델링
추상 클래스 모델링
추상 클래스는 실제 구현이 필요한 작업에 대한 일반적인 동작을 제공합니다. 예를 들어, 여러 유형의 데이터 저장소를 관리하는 추상 클래스를 모델링할 수 있습니다.
class AbstractStorage {
public:
virtual void read() = 0;
virtual void write() = 0;
};
class DatabaseStorage : public AbstractStorage {
public:
void read() override {
// 데이터베이스에서 읽기 동작 구현
}
void write() override {
// 데이터베이스에 쓰기 동작 구현
}
};
인터페이스 모델링
인터페이스는 어떤 기능을 수행하는 데 필요한 메서드에 대한 규약을 제공합니다. 예를 들어, 다양한 타입의 정렬 알고리즘을 적용하기 위한 인터페이스를 모델링할 수 있습니다.
class SortInterface {
public:
virtual void sort() = 0;
};
class QuickSort : public SortInterface {
public:
void sort() override {
// 퀵 정렬 알고리즘 구현
}
};
class MergeSort : public SortInterface {
public:
void sort() override {
// 합병 정렬 알고리즘 구현
}
};
결론
추상 클래스는 일반 동작과 함께 구현이 필요한 동작을 제공하는 데 사용되며, 인터페이스는 특정 기능에 대한 일반적인 동작을 정의하는 데 사용됩니다. 이러한 개념은 객체지향 설계와 모델링에서 중요한 역할을 합니다.
참고문헌:
- C++ Core Guidelines - Abstract classes
- GeeksforGeeks - Pure Virtual Functions and Abstract Classes in C++
- Doing objects in C++ - Interfaces in C++: The Ultimate Guide