본문 바로가기
카테고리 없음

[이펙티브자바] item20. 추상클래스보다는 인터페이스를 우선하라

by 서초록 2022. 9. 7.

자바가 제공하는 다중 구현 메커니즘은 1. 인터페이스, 2. 추상클래스로 나뉜다. 

자바8 이후 인터페이스도 디폴트 메서드를 제공할 수 있게 되어 두 매커니즘 보두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 

차이점은, 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야한다

 

기존 클래스 위에 새로운 추상 클래스를 끼워넣기는 일반적으로 어렵다. 두 개의 클래스가 같은 추상 클래스를 확장하려면, 그 추상 클래스는 계층구조상 두 클래스의 공통 조상이어야한다. 이것은 혼란을 야기한다. 

 

인터페이스는 믹스인(mixin)정의에 안성맞춤이다. 

 

정리

일반적으로 다중 구현을 구현하기에 인터페이스가 적합하다. 골격 구현은 '가능한 한' 인터페이스의 디폴트 메서드로 제공하며 그 인터페이스를 구현한 모든 곳에서 활용하도록 하는 것이 좋다.