C++에서 pure virtual function과 abstract class의 개념은?

_____
Q1: Pure Virtual Function이란 무엇인가요?
A1: Pure Virtual Function은 기본 클래스(기반 클래스)에서 선언되지만, 구현(함수 몸체)이 없는 가상 함수입니다. 서브클래스에서 반드시 재정의해야 하며, 문법적으로 함수 선언 뒤에 `= 0`을 붙여 정의합니다. 예: `virtual void func() = 0;`

Q2: Pure Virtual Function이 사용되는 이유는 무엇인가요?
A2: 인터페이스 역할을 하는 함수들을 강제하기 위해 사용됩니다. 특정 함수들을 파생 클래스에서 반드시 구현하도록 요구하고, 기본 클래스가 추상화된 개념임을 나타냅니다.

Q3: Abstract Class(추상 클래스)란 무엇인가요?
A3: 하나 이상의 pure virtual function을 포함하는 클래스입니다. 추상 클래스는 인스턴스(객체)를 직접 생성할 수 없고, 반드시 상속받은 파생 클래스에서 pure virtual function들을 구현해야 객체 생성이 가능합니다.

Q4: Abstract Class를 사용하는 이유는 무엇인가요?
A4: 공통 인터페이스를 정의하고, 구체적인 구현은 파생 클래스에 위임하며, 객체 지향 설계에서 다형성을 지원하기 위해 사용합니다. 코드를 더 유연하고 확장 가능하게 만드는 데 도움을 줍니다.

Q5: Pure Virtual Function과 Abstract Class의 관계는 무엇인가요?
A5: Pure Virtual Function이 하나라도 포함된 클래스는 추상 클래스가 됩니다. 따라서 pure virtual function이 존재하는 순간 해당 클래스는 abstract class가 되며, 객체를 생성할 수 없습니다.

Q6: Abstract Class에서 일반 멤버 함수는 정의할 수 있나요?
A6: 네, 가능합니다. 추상 클래스에서도 일반 함수(구현된 함수)와 멤버 변수를 가질 수 있으며, pure virtual function만 구현하지 않고 선언만 하는 함수입니다.

Q7: Pure Virtual Function과 Virtual Function의 차이점은 무엇인가요?
A7: Virtual Function은 기본 클래스에서 구현이 있는 가상 함수이며, 필요시 파생 클래스에서 재정의할 수 있습니다. Pure Virtual Function은 구현이 없으며, 파생 클래스에서 반드시 구현해야 하는 함수입니다.

Q8: Pure Virtual Function에도 구현을 제공할 수 있나요?
A8: 예외적으로, pure virtual function에 기본 클래스에서 구현을 제공할 수는 있지만, 파생 클래스에서는 반드시 이 함수를 재정의해야 하며, 이를 통해 기본 동작을 제공하면서도 재정의를 강제할 수 있습니다.

Q9: Abstract Class 객체를 생성하려 하면 어떤 오류가 발생하나요?
A9: 컴파일 오류가 발생합니다. 예: ‘cannot instantiate abstract class’라는 메시지가 출력되며, pure virtual function을 모두 구현해야 객체 생성이 가능합니다.

Q10: Pure Virtual Function 선언 방법 예시는?
A10:
```cpp
class Base {
public:
virtual void foo() = 0; // pure virtual function
};
```

요약:
- Pure Virtual Function: 선언만 있고 구현이 없는 가상 함수, 재정의를 강제
- Abstract Class: 하나 이상의 pure virtual function을 가진 클래스, 직접 인스턴스 생성 불가
- 관계: pure virtual function 포함 → abstract class
- 용도: 인터페이스 정의 및 다형성 지원
C++에서 pure virtual function 과 abstract class 는 객체 지향 프로그래밍의 중요한 개념으로, 다형성과 인터페이스 설계를 지원하는 데 사용됩니다.

이 두 개념은 서로 밀접하게 관련되어 있으며, 클래스 설계에서 중요한 역할을 합니다.

Pure Virtual Function Pure virtual function 은 클래스에서 선언되지만, 구현이 제공되지 않는 가상 함수입니다.

이러한 함수는 클래스가 인터페이스 역할을 하도록 강제하며, 해당 클래스를 상속받는 모든 파생 클래스에서 반드시 이 함수를 구현해야 합니다.

Pure virtual function은 다음과 같은 형식으로 선언됩니다: ```cpp class Base { public: virtual void pureVirtualFunction() = 0; // Pure virtual function }; ``` 여기서 `= 0`은 이 함수가 pure virtual function임을 나타냅니다.

이와 같은 함수는 기본 클래스에서 구현되지 않으며, 파생 클래스에서 반드시 구현해야 합니다.

만약 파생 클래스가 이 함수를 구현하지 않으면, 그 파생 클래스 또한 pure virtual function을 포함하게 되어 추상 클래스가 됩니다.

Abstract Class Abstract class 는 하나 이상의 pure virtual function을 포함하는 클래스입니다.

이러한 클래스는 인스턴스를 생성할 수 없으며, 주로 인터페이스를 정의하는 데 사용됩니다.

Abstract class는 다음과 같이 정의됩니다: ```cpp class AbstractClass { public: virtual void pureVirtualFunction() = 0; // Pure virtual function }; ``` 이 클래스는 인스턴스를 생성할 수 없지만, 다른 클래스가 이 클래스를 상속받아 구현할 수 있습니다.

Abstract class는 다형성을 제공하며, 다양한 파생 클래스에서 공통된 인터페이스를 정의하는 데 유용합니다.

사용 예시 다음은 pure virtual function과 abstract class의 사용 예시입니다: ```cpp include // Abstract class class Shape { public: virtual void draw() = 0; // Pure virtual function }; class Circle : public Shape { public: void draw() override { std::cout << "Drawing a Circle" << std::endl; } }; class Square : public Shape { public: void draw() override { std::cout << "Drawing a Square" << std::endl; } }; void renderShape(Shape* shape) { shape->draw(); // 다형성을 이용한 호출 } int main() { Circle circle; Square square; renderShape(&circle); // "Drawing a Circle" renderShape(&square); // "Drawing a Square" return 0; } ``` 위의 예제에서 `Shape` 클래스는 추상 클래스이며, `draw`라는 pure virtual function을 포함하고 있습니다.

`Circle`과 `Square` 클래스는 `Shape` 클래스를 상속받아 `draw` 함수를 구현합니다.

`renderShape` 함수는 `Shape` 포인터를 매개변수로 받아 다형성을 이용하여 다양한 도형을 그릴 수 있습니다.

요약 - Pure Virtual Function : 구현이 없는 가상 함수로, 파생 클래스에서 반드시 구현해야 함. - Abstract Class : 하나 이상의 pure virtual function을 포함하는 클래스. 인스턴스를 생성할 수 없으며, 인터페이스를 정의하는 데 사용됨. 이러한 개념들은 C++에서 객체 지향 프로그래밍의 강력한 기능을 제공하며, 코드의 재사용성과 유지보수성을 높이는 데 기여합니다.

작성자: 김주원 [비회원] | 작성일자: 1년 전 2024-09-20 17:11:32
조회수: 177 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.