반응형
디폴트 메서드
자바8은 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공한다.
- 정적 메서드(static method)
- 인터페이스 내부에 정적 메서드 사용
- 디폴트 메서드(default method)
- 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 사용
즉, 자바8 에서는 메서드 구현을 포함하는 인터페이스를 정의할 수 있다.
인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 이렇게 하면 기존의 코드 구현을 바꾸도록 강요하지 않으면서도 인터페이스를 바꿀 수 있다.
디폴트 메서드는
다중 상속 동작
이라는 유연성을 제공하면서 프로그램 구성에도 도움을 준다.
디폴트 메소드를 이용하면 자바 API의 호환성을 유지하면서 라이브러리를 바꿀 수 있다.
기존 구현을 고치지 않고도 인터페이스를 바쑬 수 있다. - 다중상속 동작이라는 유연성 제공
- 특징
- 디폴트 메서드는
default
키워드로 시작한다. - 메서드 바디를 포함한다
{}
- 디폴트 메서드는
public interface Sized {
int size();
default boolean isEmpty() {
return size() == 0;
}
}
13.3 디폴트 메서드 활용 패턴
디폴트 메소드 이용하는 방식
- 선택형 메서드(optional method)
- 동작 다중 상속(multiple inheritance of behavior)
13.3.1 선택형 메서드
13.3.2 동작 다중상속
- 클래스는 한 개만 상속 받을 수 있지만, 인터페이스는 여러 개 구현할 수 있다.
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable {}
13.4 해석규칙
규칙
- 클래스가 항상 이긴다. 클래스나 슈퍼클래스에서 정의한 메서드가 디폴트 메서드보다 우선권을 가짐
- 클래스 제외하고 서브인터페이스가 이긴다. 상속관계를 갖는 인터페이스에서 같은 시그니처를 갖는 메서드를 정의할 때는 서브인터페이스가 이긴다. 즉 B 가 A를 상속받는다면 B가 A를 이긴다.
- 위에서 결정이 안된다면 여러 인터페이스를 상속받는 클래스가 명시적으로 디폴트 메서드를 오버라이드하고 호출해야 한다.
클래스와 메서드 관계로 디폴트 메서드를 선택할 수 없는 경우에는 명시적으로 선택해야한다 -> super
- X.super.m(....)
반응형
'책정리 > Modern Java In Action' 카테고리의 다른 글
[책 정리]Modern Java In Action 15장 (0) | 2020.06.17 |
---|---|
[책 정리]Modern Java In Action 2장 (0) | 2020.05.18 |
[책 정리]Modern Java In Action 1장 (0) | 2020.05.18 |
[책 정리]Modern Java In Action 6장 (0) | 2020.05.18 |
[책 정리]Modern Java In Action 시작 (0) | 2020.05.18 |