추상 클래스와 인터페이스
자바에서는 코드의 재사용성을 높이기 위해 공통으로 쓰일 수 있는 내용들을 상속해서 사용하도록 추상 클래스나 인터페이스로 정의할 수 있다. 추상 클래와 인터페이스 모두 상속을 위해 만들어진 것으로 그 자체로 인스턴스를 만들 수 없다. 그리고 추상 클래스나 인터페이스에 존재하는 추상 메소드는 상속/구현하는 하위 클래스에서 구현해야 한다. 이 둘은 비슷한 역할을 하고 있지만 차이점도 존재한다. 먼저 추상 클래스는 일반 메소드도 가질 수 있고 멤버 변수도 가질 수 있다. 하지만 단일 추상클래스만을 상속 시킬 수 있다. 인터페이스는 추상 메소드만을 가져야하고 멤버변수를 가질 수 없지만 다중상속을 시킬 수 있다.
인터페이스와 믹스인 정의
// 비교 기능(Comparable)과 반복 기능(Iterable)이 혼합 구현 되어있다.
class MyClass implements Comparable, Iterable {
...
}
인터페이스는 다중 상속이 가능한 덕분에 믹스인 정의에 사용하기 안성맞춤이다. 믹스인이란 선택적인 기능을 클래스에 혼합(mixed in) 시키는 것을 말한다. 위 코드를 보면 비교 기능 인터페이스인 Comparable과 반복 기능 인터페이스인 Iterable을 구현하고있다. 이는 중복 상속이 가능한 인터페이스의 특성 덕분이다.
+ 인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 있다.
+ 인터페이스는 기능을 향상시키는 안전하고 강력한 수단이 된다.
인터페이스와 추상 골격 클래스
인터페이스와 추상클래스는 각각의 장단점이 있다. 인터페이스와 해당 인터페이스를 구현한 추상 골격 클래스를 함께 제공함으로써 이를 선택하도록 할 수 있다. Collection 인터페이스에는 AbstractCollection 추상 클래스가 있다. 인터페이스를 사용하여 구현체를 만들 수도 있고, 어느정도 기능이 구현된 AbstractCollection을 상속하여 간단하게 구현체를 만들 수 도 있다.
'STUDY > 이펙티브자바' 카테고리의 다른 글
4-8) 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2022.09.15 |
---|---|
4-7) 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) | 2022.09.13 |
4-5) 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2022.09.07 |
4-4) 상속보다는 컴포지션을 사용하라 (0) | 2022.09.05 |
4-3) 변경 가능성을 최소화하라 (0) | 2022.09.05 |