다시 한 번 말하지만 상속은 두 가지 용도로 사용된다.
첫 째, 타입 계층을 구현하기 위함, 타입 계창 안에서 부모 클래스는 일반적 개념을, 자식 클래스는 특수한 개념을 구현한다. 이 관점에서 부모는 자식의 일반화(generalization)이고 자식은 부모의 특수화(specialization)이다.
두 번째는 코드 재사용이다. 간단한 선언만으로 부모 클래스의 코드를 재사용할 수 있다. 허나 이 경우 부모 자식이 강하게 결합되어 변경하기 어려운 코드를 얻게 될 확률이 높다.
그렇기에 상속을 사용하는 일차적인 목표는 코드 재사용이 아니라 타입 계층을 구현하는 것이 되어야 한다. 상속의 가치는 타입 계층을 구현할 수 있는 쉽고 편안한 방법을 제공한다는 데 있다.
이번 장의 주제는 올바른 타입 계층을 구성하는 원칙이다.
이 관점에서 타입은 우리가 인지하는 세상의 사물의 종류다. 그리고 어떤 대상의 타입으로 분류될 때 그 대상을 타입의 인스턴스라고 부른다. 그리고 타입의 인스턴스를 객체라고 한다.
이 관점에서 타입은 연속적인 비트에 의미와 제약을 부여하기 위해 사용되고 두 가지 목적을 위해 사용된다.
정리하면 타입은 적용 가능한 오퍼레이션의 종류와 의미를 정의해 코드의 의미를 명확하게 전달하고 개발자의 실수를 방지하기 위해 사용된다.
위에서 본 타입의 정의를 객체지향 패러다임 관점에서 보자.
타입 in 프로그래밍 == 호출 가능한 오퍼레이션의 집합 오퍼레이션 in OOP == 객체가 수신할 수 있는 메시지의 종류