상속의 두가지 용도
- 타입 계층을 구현한다. 타입계층의 관점에서 부모 클래스는 일반적인 개념을 구현하고 자식 클래스는 특수한 개념을 구현한다.
- 코드 재사용. 하지만 코드 재사용을 위해서 상속을 사용할 경우 부모클래스와 자식 클래스가 강하게 결합되기 때문에 변경하기 어려운 코드를 얻게 될 확률이 높다.
개념 관점의 타입
우리가 인지하는 세상의 사물의 종류를 타입이라고 한다. 어떤 대상이 타입으로 분류될 때 그 대상을 타입의 인스턴스 라고 부른다. 일반적으로 타입의 인스턴스를 객체라고 부른다.
프로그래밍 언어 관점의 타입
- 타입에 수행될 수 있는 유효한 오퍼레이션의 집합을 정의한다.
- 타입에 수행되는 오퍼레이션에 대해 미리 약속된 문맥을 제공한다.
객체지향 페러다임 관점의 타입
객체의 퍼블릭 인터페이스가 객체의 타입을 결정한다. 따라서 동일한 퍼블릭 인터페이스를 제공하는 객체들은 동일한 타입으로 분류된다.
슈퍼타입
- 집합이 다른 집합의 모든 멤버를 포함한다
- 타입 정의가 다른 타입보다 좀 더 일반적이다
- 서브타입이 정의한 퍼블릭 인터페이스를 일반화시켜 상대적으로 범용적이고 넓은 의미로 정의한 것
서브타입
- 집합에 포함되는 인스턴스들이 더 큰 집합에 포함된다
- 타입 정의가 다른 타입보다 좀 더 구체적이다
- 슈퍼타입이 정의한 퍼블릭 인터페이스를 특수화시켜 상대적으로 구체적이고 좁은 의미로 정의한 것