본문 바로가기

STUDY/이펙티브자바

4-6) 추상 클래스보다는 인터페이스를 우선하라

추상 클래스와 인터페이스

 

자바에서는 코드의 재사용성을 높이기 위해 공통으로 쓰일 수 있는 내용들을 상속해서 사용하도록 추상 클래스나 인터페이스로 정의할 수 있다. 추상 클래와 인터페이스 모두 상속을 위해 만들어진 것으로 그 자체로 인스턴스를 만들 수 없다. 그리고 추상 클래스나 인터페이스에 존재하는 추상 메소드는 상속/구현하는 하위 클래스에서 구현해야 한다. 이 둘은 비슷한 역할을 하고 있지만 차이점도 존재한다. 먼저 추상 클래스는 일반 메소드도 가질 수 있고 멤버 변수도 가질 수 있다. 하지만 단일 추상클래스만을 상속 시킬 수 있다. 인터페이스는 추상 메소드만을 가져야하고 멤버변수를 가질 수 없지만 다중상속을 시킬 수 있다.

 

 


인터페이스와 믹스인 정의

 

// 비교 기능(Comparable)과 반복 기능(Iterable)이 혼합 구현 되어있다.
class MyClass implements Comparable, Iterable {
    ...
}

인터페이스는 다중 상속이 가능한 덕분에 믹스인 정의에 사용하기 안성맞춤이다. 믹스인이란 선택적인 기능을 클래스에 혼합(mixed in) 시키는 것을 말한다. 위 코드를 보면 비교 기능 인터페이스인 Comparable과 반복 기능 인터페이스인 Iterable을 구현하고있다. 이는 중복 상속이 가능한 인터페이스의 특성 덕분이다.

 

+ 인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 있다.

+ 인터페이스는 기능을 향상시키는 안전하고 강력한 수단이 된다.

 

 


인터페이스와 추상 골격 클래스

 

인터페이스와 추상클래스는 각각의 장단점이 있다. 인터페이스와 해당 인터페이스를 구현한 추상 골격 클래스를 함께 제공함으로써 이를 선택하도록 할 수 있다. Collection 인터페이스에는 AbstractCollection 추상 클래스가 있다. 인터페이스를 사용하여 구현체를 만들 수도 있고, 어느정도 기능이 구현된 AbstractCollection을 상속하여 간단하게 구현체를 만들 수 도 있다.

728x90