Java/EffectiveJava

Effective Java Item20. 추상 클래스보다는 인터페이스를 우선하라.

Flambee 2025. 1. 18. 22:19

자바가 제공하는 다중 구현 메카니즘

  • 인터페이스(Interface) : 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규악을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다.
  • 추상 클래스(abstract class) : 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야한다. 자바는 단일 상속만 지원한다.

인터페이스를 사용하면 얻을 수 있는 것

  • 기존 클래스에도 손쉽게 새로운 인페이스를 구현해넣을 수 있다.
  • 인터페이스는 믹스인 정의에 안성맞춤이다.
  • 인터페이스로는 계층구조가 없는 타입 프로엠워크를 만들 수 있다.
  • 래퍼 클래스 관용구(아이템18)와 함께 사용하면 인터페이스 기능을 향상시키는 강력한 수단이 된다.

인터페이스와 추상 클래스를 적절히 사용하여 구현하는 방법

  • 골격 구현(skeletal implementation) 클래스 사용
    • 복잡한 인터페이스라면 구현하는 수고를 덜어주는 골격 구현을 함께 제공하는 방법
    • 가능한 한 인터페이스의 디폴트 메서드로 제공하여 그 인터페이스를 구현한 모든 곳에서 활용하도록 하는 것이 좋다.
    • ex) Map.Entry를 사용한 Abstract class 방법
  • 단순 구현 클래스 사용
    • 골격 구현의 작은 변종으로 상속을 위해 인터페이스만으로 구현하는 방법
    • ex) AbstractMap.SimpleEntry