- 추상 클래스가 규정하는 자료형을 구현하기 위해서는 추상 클래스를 반드시 계승해야한다.
- 인터페이스는 메서드를 정의하고 일반 규약만 지키면 되기에 클래스 계층에 속할 필요가 없다
- 그렇기에 이미 있는 클래스를 개조해서 새로운 인터페이스를 구현하는 것은 간단하다
- 필요 메서드를 추가한 다음 implements 절에 넣는 것이 전부다.
- 인터페이스는 믹스인을 정의하는데 이상적이다
- 인터페이스는 비 계층적인 자료형 프레임워크를 만들 수 있도록 한다.
public interface Singer {
AudioClip sing(Song s);
}
public interface SongWriter {
Song compose(boolean hit);
}
public interface SingerSongwriter extends Singer, Songwriter {
AudioClip strum();
void actSensitive();
}
- 새로운 인터페이스를 확장할 수 있으며 여기에 새로운 메서드를 추가할 수도 있다.
- 만약 인터페이스를 쓰지 않는다면 조합의 가짓수에 따라 새로운 클래스를 만들어야 한다 (2^n)
- 이 문제를 조합 폭증이라고 한다
- 인터페이스를 사용하면 포장 클래스 숙어를 통해 안전하면서 강력한 기능 개선이 가능하다( 규칙 18번 참고)
추상 골격 구현 클래스
- 인터페이스의 장점과 추상 클래스의 장점을 결합할 수 있다.
- 인터페이스로 자료형을 정의, 구현은 골격 구현 클래스에 맡기면 된다.
- 관습적으로 골격 구현 클래스의 이름은 AbstractInterface와 같이 정한다
static List<Integer> intArrayAsList(final int[] a) {
if (a == null) throw new NullPointException();
return new AbstractList<Integer>() {
...
}
}
- 인터페이스를 살펴보고 다른 메서드를 쓸 때 기본 메서드들을 추려낸다
- 기본 메서드들은 추상메서드로 선언하고 나머지 메서드들은 구현해서 넣는다
- 인터페이스보다 추상 클래스가 발전하기 쉽다.
- 인터페이스가 공개되고 널리 구현된 다음에는 인터페이스 수정이 거의 불가능하다
'ETC > 도서' 카테고리의 다른 글
[자바의 신] 7장. 여러 데이터를 하나에 넣을 수는 없을까요? (0) | 2024.09.26 |
---|---|
[자바의 신] 6장 제가 조건을 좀 따져요 (0) | 2024.09.26 |
[자바의 신] 5장 계산을 하고 싶어요 (0) | 2024.09.25 |
Effective Java 2/E - 규칙.19. 인터페이스 자료형을 정의할 때만 사용하라 (0) | 2023.03.16 |
추상팩토리 패턴을 사용이유 (0) | 2022.12.16 |