Nagie's DevStory

[CPP] 31. 순수 가상 함수와 추상 클래스 (Pure Virtual Function and Abstract Class) 본문

Programming/C++

[CPP] 31. 순수 가상 함수와 추상 클래스 (Pure Virtual Function and Abstract Class)

Nagie 2023. 10. 22. 17:33
728x90

순수 가상함수(Pure Virtual Function)는 함수 본문이 없고

;(세미콜론)으로 끝나며 앞에는 'virtual' 키워드가 붙고 뒤에는 '= 0'으로 표시되며 아래의 코드처럼 작성할 수 있다.

 

class AbstractClass {
public:

    virtual void pureVirtualFunction() = 0; // 순수 가상 함수
};

 

추상 클래스는 하나 이상의 순수 가상 함수를 포함하는 클래스를 말하며 아래는 추상 클래스의 예시다.

 

class AbstractShape {
public:

    virtual void draw() = 0; // 순수 가상 함수
    virtual double area() const = 0; // 순수 가상 함수
};

class Circle : public AbstractShape {
public:

    void draw() override {
        // 원을 그리는 코드
    }
    
    double area() const override {
        // 원의 면적을 계산하는 코드
    }
};

class Square : public AbstractShape {
public:

    void draw() override {
        // 정사각형을 그리는 코드
    }
    
    double area() const override {
        // 정사각형의 면적을 계산하는 코드
    }
};

 

순수 가상함수와 추상 클래스는 밀접한 관계가 있다.

C++에서는 다른 언어와는 다르게 abstract라는 키워드를 사용해 추상 클래스를 구별하지 않으며

하나 이상의 순수 가상함수를 포함한 클래스를 추상 클래스라고 정의하기 때문이다.

추상 클래스는 직접 객체를 생성할 수 없으며 파생 클래스에서 순수 가상 함수를 재정의해 실제 객체를 만들어야 한다.

추상 클래스의 주요 목적은 인터페이스를 정의하고 파생 클래스가

그 인터페이스를 구현하도록 강제하는 일종의 청사진 역할을 한다고 보면 되겠다.

728x90
Comments