C++에서 pure virtual function과 abstract class의 개념은?
_____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
- 용도: 인터페이스 정의 및 다형성 지원
이 두 개념은 서로 밀접하게 관련되어 있으며, 클래스 설계에서 중요한 역할을 합니다.
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
`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
조회수: 177 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.