서브타입을 목적으로 상속을 사용할 때 고려해야 하는 규칙과 원칙
상속이 두 가지 용도로 사용된다느 사실을 이해하는 것이 가장 중요하다.
따라서, 상속을 사용하는 목적은 무조건 “타입 계층 구현”하는 것이어야만 한다.
→ 다형적으로 동작하는 객체들의 관계에 기반해 확장 가능하고 유연한 설계를 얻을 수 있게 된다.
일반화는 보다 범용적이고 광범위한 개념을 나타냅니다. 상속 관계에서 부모 클래스는 보다 일반적인 개념을 나타내며, 자식 클래스들의 공통적인 속성과 행동을 정의합니다. 일반화를 통해, 다양한 하위 타입들이 공유할 수 있는 기본적인 구조와 행동을 추출하여 공통의 부모 클래스에 정의할 수 있습니다. 이는 코드 재사용을 촉진하고, 유지 관리를 용이하게 합니다.
예를 들어, "동물" 클래스는 모든 동물이 공통으로 가지고 있는 속성과 행동을 정의할 수 있는 일반적인 개념입니다. 이 클래스에는 "먹다", "자다"와 같은 메서드가 포함될 수 있습니다.
특수화는 일반화의 반대 개념으로, 보다 구체적이고 특정한 개념을 나타냅니다. 상속 관계에서 자식 클래스는 부모 클래스보다 더 특정한 속성이나 행동을 추가하여 구체화합니다. 자식 클래스는 부모 클래스의 속성과 행동을 상속받으며, 그 위에 추가적인 특성이나 메서드를 정의하여 특정한 개념을 구현합니다.
"동물" 클래스를 상속받는 "고양이" 클래스는 "동물"의 특수한 형태로, "동물" 클래스에 정의된 일반적인 행동을 상속받으면서 "야옹하다"라는 고양이만의 특별한 행동을 추가로 정의할 수 있습니다.