상속(Inheritance) 의 이해를 위한 이 책의 접근방식

“상속은 이러한 것이고, 이렇게 사용하면 되는 겁니다”

보다는 감탄사가 나올 정도의 느낌을 받게 다음의 순서로 상속을 설명하고자 한다.

  1. 문제의 제시
    1. 상속과 더불어 다형성의 개념을 적용해야만 해결 가능한 문제를 먼저 제시한다.
  2. 기본개념 소개
    1. 상속의 문법적 요소를 하나씩 소개해 나간다. 그리고 그 과정에서 앞서 제시한 문제의 해결책을 함께 고민해 나간다.
  3. 문제의 해결
    1. 처음 제시한 문제를, 상속을 적용하여 해결한다. 그리고 이때 여러분의 감탄사를 기대한다.

상속에 대한 새로운 관점의 이해

90년대 후반부터 객체지향은 매우 급속히 확산되어왔다. 그리고 그 과정에서 ‘상속’에 대한 관점도 많이 달라졌다.

“기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소가 상속이다.”

재활용의 목적으로만 존재하지 않음을 배워야한다.

문제의 제시를 위한 시나리오의 도입

class PermanentWorker{
private:
	char name[100];
	int salary;
public:
	생성자
	int GetPay() const
	void ShowSalaryInfo() const
};

class EmployeeHandler{
private:
	PermanentWOrker* empList[50];
	int empNum;
public:
	생성자
	void AddEmployee ...
	void ShowAllSalaryInfo ...
	void ShowTotalSalary ...
	소멸자 ...
};

그리고 이렇게 기능의 처리를 실제로 당담하는 클래스를 가리켜 ‘컨트롤(control) 클래스’ 또는 ‘핸들러(handler) 클래스’라 한다.

컨트롤 클래스

PermanentWorker 클래스만 놓고 보면, 이프로그램이 어떠한 기능을 제공하는지 구체적으로 알 수 없다. 하니반 EmployeeHandler 클래스를 보면, 이 프로글매이 어떠한 기능을 제공하는지 구체적으로 알 수 있다. 이렇듯 컨트롤 클래스는 기능 제공의 핵심이 되기 때문에 모든 객체지향 프로그램에서 반드시 존재하는 클래스이다.

모든 소프트웨어 설계에 있어서 중요시하는 것 중 하나는 다음과 같다.