C++ 추상화 기초 클래스(abstract base class; ABC)와 순수 가상 함수(pure virtual function)

프로그래밍/C++ 2019.10.22 댓글 Plorence

추상화 기초 클래스(abstract base class)

추상화 기초 클래스는 기초 클래스로 쓰이고 순수 가상 함수가 1개 이상의 클래스추상화 기초 클래스라고 부릅니다.

줄여서 ABC라고 부르기도 합니다.

그리고 이 추상화 기초 클래스의 모든 멤버 함수가 순수 가상 함수일 때 인터페이스(Interface)라고 부릅니다.

이러한 추상화 기초 클래스를 상속받는 클래스를 구체화 클래스(concrete class)라고 부릅니다.

 

추상화 기초 클래스는 기초 클래스로부터 상속받는 여러가지 클래스가 있을 때, 공통적인걸 하나로 묶는 클래스입니다.

하나로 묶으면서 파생 클래스마다 다른 동작을 해야하는건 순수 가상 함수로 선언을 합니다.

 

"대충 이런일은 할 건데 이 행동은 파생 클래스마다 다를 거니까 설계만 해놓았어. 실제 정의(구현)는 파생 클래스에서 해야 해"가 추상화 기초 클래스입니다.

그렇기 때문에 순수 가상 함수인 경우, 파생 클래스에서 반드시 정의해줘야 합니다.

 

추상화 기초 클래스 만들기

#include <iostream>
using namespace std;
class Person {
public:
        virtual void Move() = 0;
};
int main(void) {
        Person per; //에러!!
}

추상화 기초 클래스는 1개 이상의 순수 가상 함수를 선언해야 합니다.

추상화 기초 클래스는 객체로 생성이 불가능합니다.

왜냐하면 추상화 기초 클래스는 기초 클래스의 역할을 하기 위해서만 존재하기 때문입니다.

 

순수 가상 함수(pure virtual function)

순수 가상 함수는 정의뒤에 =0;를 붙입니다.

 virtual void Move() = 0; //null

순수 가상 함수를 만듬으로써, 정의를 파생 클래스에게 넘깁니다.

순수 가상 함수가 정의를 가지는 것을 허용합니다.

(왜 허용하는 지는 모르겠으나, 순수 가상 함수를 기초 클래스에서 정의하는 일은 하면 안됩니다.)

 

댓글