타입은 개념의 분류를 의미하고 클래스는 타입을 구현하는 한 가지 방법일 뿐이다.

클래스를 이용한 타입 계층 구현

클래스를 이용한 인스턴스는 타입(퍼블릭 인터페이스)를 만드는 동시에 구현을 한다. 퍼블릭 인터페이스는 동일하지만 다른 방식으로 구현해야 하는 객체가 필요하면 상속을 이용하면 된다. (@Override)

인터페이스를 이용한 타입 계층 구현

  1. 여러 클래스가 동일한 타입을 구현할 수 있다
  2. 하나의 클래스가 여러 타입을 구현할 수 있다.

추상 클래스를 이용한 타입 계층 구현

구체 클래스로 타입을 정의해서 상속받는 방법과 추상 클래스로 타입을 정의해서 상속받는 방법의 차이점

  1. 의존하는 대상의 추상화 정도가 다르다.
    1. 구체 클래스는 부모클래스의 내부 구현에 의존하기 때문에 결합도가 높지만 추상 클래스는 내부 구현이 아니라 추상 메서드의 시그니처에 의존하기 때문에 결합도가 낮다.
  2. 상속을 사용하는 의도다.
    1. 추상 클래스로 타입을 정해 놓은것은 상속을 사용하는 의도가 다분하다.

추상 클래스와 인터페이스 결합하기

인터페이스로 다중상속 문제를 해결할 수 있지만 중복 코드를 제거하기가 어렵다. 추상 클래스와 인터페이스를 잘 조합하여 중복 코드를 제거하면서 다중상속을 할 수 있게 만들 수 있다. (골격 구현 추상 클래스)