infinity : 무한한 성장가능성

모던 자바 인 액션 13. 디폴트 메서드 (내용 추가하기) 본문

📖 book/🧡Modern Java in Action

모던 자바 인 액션 13. 디폴트 메서드 (내용 추가하기)

인피니 2022. 7. 20. 00:05

자바에서 인터페이스와 관련된 메서드는 한 몸처럼 구성됨 

즉, 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현 or 슈퍼클래스(부모클래스)의 구현을 상속받아야 함

 

만약, 인터페이스에 어떤 메서드를 추가한다면? 

인터페이스를 상속하는 모든 클래스가 해당 메서드를 추가로 구현해야하는 문제 발생 

즉, 모든 클래스에 변경이 생긴다.. 

 

위의 문제를 해결하기위해 자바 8에서는 인터페이스를 정의하는 두 가지 방법을 제공한다.

 

첫번째 방법)

인터테이스 내부에 정적 메서드를 사용하는 것 

 

두번째 방법)

인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드를 사용하는 것

 

디폴트 메서드란?

1) 인터페이스 안에 default라는 키워드로 시작한다.

2) 메서드 바디를 포함한다. 

 

->디폴트 메서드 예 

public interface Sized {

    int size(); // 메서드 
    default boolean isEmpty(){ //디폴트 메서드 
        return size() == 0;
    }
}

-> Sized 인터페이스를 구현하는 모든 클래스는 isEmpyt의 구현또한 상속받는다. 

즉, 인터페이스에 디폭드 메서드를 추가하면 소스 호환성이 유지됨 

( 🤔 소스 호환성이란? 코드를 고쳐도 기존 프로그램을 성공적으로 재컴파일 할 수 있음을 의미 .. ) 

 

디폴트 메서드 활용패턴 

1) 선택형 메서드 

2) 동작 다중 상속 

 

(+ 내용 추가하기)