티스토리 뷰

이펙티브 자바 Effective Java 2/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이병준역
출판 : 인사이트 2014.09.01
상세보기

자바 언어에는 여러 가지 구현을 허영하는 자료형을 만드는 방법이 두 가지 포함되어 있다.
1. 인터페이스 (interface)
2. 추상 클래스 (abstract class)

인터페이스와 추상 클래스의 분명한 차이
 => 추상 클래스는 구현된 메서드를 포함할 수 있지만 인터페이스는 구현된 메서드를 포함할 수 없다.
 => 추상 클래스가 규정하는 자료형을 구현하기 위해서는 추상 클래스를 반드시 상속 받아야 한다.
=> 인터페이스는 클래스 계층에 속할 필요가 없다.

인터페이스는 믹스인(mixin)을 정의하는 데 이상적이다.
믹스인 = 주 자료형 이외에 추가로 구현할 수 있는 자료형으로, 어떤 선택적 기능을 제공한다는 사실을 선언하기 위해 쓰인다. 
ex) Comparable은 어떤 클래스가 자기 객체는 다른 객체와의 비교 결과에 따른 순서를 갖는다고 선언할 때 쓰는 믹스인 인터페이스 이다.
추상 클래스는 가질 수 있는 상위 클래스가 하나뿐이기 때문에 클래스 계층에 믹스인을 넣기 좋은 곳이 없다.

인터페이스는 비 계층적인 자료형 프레임워크를 만들 수 있도록 한다.

public interface Singer { AudioClip sing(Song s); } public interface Songwriter { Song compose(boolean hit); }

가수를 표현하는 인터페이스와 작곡가를 표현하는 인터페이스가 있다.
가수 가운데는 작곡가인 사람 도 있다.

public interface SingerSongwriter extends Singer, Songwriter { AudioClip strum(); void actSensitive(); }

아무 문제없이 표현할 수 있다.

추상 클래스를 자료형 정의 수단으로 사용했을 때 만족해야 하는 심각한 제약사항들을 따르지 않아도 추상 클래스를 구현할 수 있도록 돕는다는 것이 골격 구현 클래스의 이점이다.

다양한 구현을 허용하는 자료형을 추상 클래스로 정의하면 인터페이스보다 나은 점이 한 가지 있는데, 인터페이스 보다는 추상 클래스가 발전시키기 쉽다 는 것이다.
다음 릴리스에 새로운 메서드를 추가하고 싶다면, 적당한 기본 구현 코드를 담은 메서드를 언제든 추가할 수 있고 해당 추상 클래스를 계승하는 모든 클래스는 즉시 새로운 메스드를 사용할 수 있다.

public 으로 공개된 인터페이스는 수정이 거의 불가능 하기 때문에 신중해야 한다.
공개된 인터페이스를 구현한 클래스들이 있기 때문에 공개된 인터페이스를 수정할 경우 클라이언트 코드를 깨뜨리게 된다.

요약 : 인터페이스는 다양한 구현이 가능한 자료형을 정의하는 가장 좋은 방법이다.
        : 유연하고 강력한 API를 만드는 것보다 개선이 쉬운 API를 만드는 것이 중요한 경우는 예외다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함