ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [책 정리]Modern Java In Action 13장
    책정리/Modern Java In Action 2020. 6. 7. 17:19

    디폴트 메서드

    자바8은 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공한다.

    • 정적 메서드(static method)
      • 인터페이스 내부에 정적 메서드 사용
    • 디폴트 메서드(default method)
      • 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 사용

    즉, 자바8 에서는 메서드 구현을 포함하는 인터페이스를 정의할 수 있다.

    인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 이렇게 하면 기존의 코드 구현을 바꾸도록 강요하지 않으면서도 인터페이스를 바꿀 수 있다.

    디폴트 메서드는 다중 상속 동작 이라는 유연성을 제공하면서 프로그램 구성에도 도움을 준다.
    디폴트 메소드를 이용하면 자바 API의 호환성을 유지하면서 라이브러리를 바꿀 수 있다. 
    기존 구현을 고치지 않고도 인터페이스를 바쑬 수 있다. - 다중상속 동작이라는 유연성 제공

    • 특징
      • 디폴트 메서드는 default 키워드로 시작한다.
      • 메서드 바디를 포함한다 {}
    public interface Sized {
      int size();
      default boolean isEmpty() {
        return size() == 0;
      }
    }

    13.3 디폴트 메서드 활용 패턴

    디폴트 메소드 이용하는 방식

    1. 선택형 메서드(optional method)
    2. 동작 다중 상속(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 해석규칙

    규칙

    1. 클래스가 항상 이긴다. 클래스나 슈퍼클래스에서 정의한 메서드가 디폴트 메서드보다 우선권을 가짐
    2. 클래스 제외하고 서브인터페이스가 이긴다. 상속관계를 갖는 인터페이스에서 같은 시그니처를 갖는 메서드를 정의할 때는 서브인터페이스가 이긴다. 즉 B 가 A를 상속받는다면 B가 A를 이긴다.
    3. 위에서 결정이 안된다면 여러 인터페이스를 상속받는 클래스가 명시적으로 디폴트 메서드를 오버라이드하고 호출해야 한다.

    클래스와 메서드 관계로 디폴트 메서드를 선택할 수 없는 경우에는 명시적으로 선택해야한다 -> super

    - X.super.m(....)

    반응형

    댓글

Designed by Tistory.