[Effective Java 3rd] 아이템20~22

Mr.Sir·2022년 7월 14일
0

Effective Java 스터디

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

자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이 두 가지다.
둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는
반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다.

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

믹스인이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에
원래의 '주된 타입' 외에도 특정 선택적 행위를 제공한다고 선언하는 효과를 준다.
대상 타입의 주된 기능에 선택적 기능을 '혼합'한다고 해서 mixin.

템플릿 메서드 패턴

인터페이스와 추상 골격 구현 클래스를 함께 제공하는 식으로 인터페이스와 추상 클래스의
장점을 모두 취하는 방법.
인터페이스로는 타입을 정의하고, 필요하면 디폴트 메서드 몇 개도 함께 제공한다.
그리고 골격 구현 클래스는 나머지 메서드들까지 구현한다.
이렇게 해두면 단순히 골격 구현을 확장하는 것만으로 이 인터페이스를 구현하는 데
필요한 일이 대부분 완료된다.

골격 구현 클래스의 아름다움은 추상 클래스처럼 구현을 도와주는 동시에,
추상 클래스로 타입을 정의할 때 따라오는 심각한 제약에서는 자유롭다는 점에 있다.

시뮬레이트한 다중 상속

인터페이스를 구현한 클래스에서 해당 골격 구현을 확장한 private 내부 클래스를 정의하고,
각 메서드 호출을 내부 클래스의 인스턴스에 전달.

     


     

아이템21 인터페이스는 구현하는 쪽을 생각해 설계하라

기존 인터페이스에 디폴트 메서드로 새 메서드를 추가하는 일은 꼭 필요한 경우가 아니면 피한다.
디폴트 메서드는 컴파일에 성공하더라도 기존 구현체에 런타임 오류를 일으킬 수 있다.
설계시 세심한 주의를 기울여야 한다.

아이템22 인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 타입을 정의하는 용도로만 사용해야 한다.
상수 공개용 수단으로 사용하지 않도록 주의.

profile
Deepveloper

0개의 댓글