Mixin : 대상 타입의 주된 기능에 선택적 기능을 혼합.
public interface Singer{
AudioClip sing(Song s);
}
public interface Songwriter{
Song compose(int charPosition);
}
public interface SingerSongwriter extends Singer, Songwriter{
AudioClip strum();
void actSensitive();
}
인터페이스와 추상 골격 구현 클래스를 함께 제공하는 식으로
인터페이스와 추상 클래스의 장점을 모두 취하는 방법도 존재한다.
인터에피스 : 타입 정의, 디폴트 메서드
골격구현 클래스 : 나머지 메서드
골격후현 클래스는 관례상 AbstractInterface
로 짓는다.
static List<Integer> intArrayAsList(int[] a){
Objects.requireNonNull(a);
return new AbstractList<>(){
@Override
public Integer get(int i) {
return a[i];
}
@Override
public Integer set(int i , Integer val) {
int oldVal = a[i];
a[i] = i;
return oldVal;
}
@Override
public int size() {
return a.length;
}
}
기존 인터페이스를 상속받았을 때, 중복하여 사용하지 않는 메서드들 전부를 override하여야 한다.
하지만 AbstractLis라는골격 구현 인터페이스
를 상속받아, 사용할 메서드들만 override한다.
혹은 중복된 override를 피할 수 있다.