본문 바로가기

공부방/Effective Java

[Effective Java] 04.클래스와 인터페이스

ITEM 20. 추상 클래스보다는 인터페이스를 우선하라.

둘의 가장 큰 차이는 추상 클래스가 정의한 타입(자료형)을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급한다.

 

추상클래스를 구현했다는 것은 추상클래스가 조상클래스라는 것인데, 이러한 구조는 클래스 계층구조에 큰 혼란을 줄 수 있다. 반대로 인터페이스는 믹스인 타입으로 주된 타입 외에도 특정한 선택적 행위를 제공한다고 선언하는 효과를 주며 유연성을 얻을 수 있다.

  • 믹스인(mixin)이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 '주된 타입' 외에도 특정 선택적 행위를 제공한다고 선언하는 효과를 준다.
  • 예를 들어 Comparable 인터페이스는 자신을 구현한 클래스의 인스턴스들끼리 순서를 정할 수 있다고 선언하는 믹스인 인터페이스이다.