이펙티브 자바 20 - 추상보다는 인터페이스

참치돌고래·2022년 7월 29일
0

인터페이스

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를 피할 수 있다.

profile
안녕하세요

0개의 댓글