[Effective C++] 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자
항목 34 : 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자.
- 인터페이스는 외부에서 해당 객체의 동작을 명령을 내리는 버튼과 같고, 구현이란 특정 명령에 의해 어떻게 동작할지 나타내는 것. 두 가지는 분명히 다르며 클래스 상속 관계를 설계할 때도 유념해야 할 것
- 순수 가상 함수를 선언하는 목적은 파생 클래스에게 함수의 인터페이스만을 물려주려는 것입니다.
- 단순 가상 함수를 선언하는 목적은 파생 클래스로 하여금 함수의 인터페이스뿐만 아니라 그 함수의 기본 구현도 물려받게 하자는 것입니다.
- 비가상 함수를 선언하는 목적은 파생 클래스가 함수 인터페이스와 더불어 그 함수의 필수적인 구현(mandatory implementation)을 물려받게 하는 것입니다.
- 순수 가상 함수에도 정의를 제공할 수 있다. 즉 순수 가상함수에도 기본 구현을 달아서 상속시킬 수 있다는 것.
- 판단에 따라 인터페이스만을 상속시켜도 되고, 인터페이스와 기본 구현을 함께 상속시킬 수도 있으며, 아니면 인터페이스와 필수 구현을 상속시킬 수 있는 것입니다.
- 클래스를 설계할 때 가장 기본적인 실수 2개 : 모든 멤버 함수를 비가상 함수로 선언하는 것. (소멸자 부분이 골칫거리가 될 수 있다), 혹은 모든 멤버 함수를 가상함수로 선언하는 것.
댓글
댓글 쓰기