-
챕터[13] 디폴트 메서드모던자바인액션 2020. 10. 21. 16:04
서론
디폴트 메서드란?
이론적인 챕터 알아두면 언젠가는 쓸 수 있을꺼라 생각한다.
기존 Java 8 이전의 인터페이스에 새로운 메서드가 생길경우 인터페이스를 구현하는 모든 클래스는 인터페이스의 새로운 메서드를 구현하거나 슈퍼클래스의 구현을 상속받아야 한다.
갑작스런(?) 인터페이스에 메서드가 추가될 경우 상속한 모든 클래스를 고치는 문제점을 해결하는 방법으러는 2가지가 존재한다.
- 정적 메서드(Static)
- 디폴트 메서드(default)
디폴트 메서드 활용 패턴
디폴트 메서드를 사용하는 방법으로 책에서 설명하는 디폴트 메서드 이용에는 2가지 방법을 알아보자.
-
선택형 메서드(optional)
-
디폴트 메서드를 이용하여 빈 메서드를 선언하여 사용을 원한다면 구현해서(재정의) 선언하면 된다.
-
-
다중 상속(multiple inheritance of behavior)
-
다중 인터페이스 Imple 후 원하는 메서드만 구현해서 사용(?)
-
클래스 및 인터페이스로부터 같은 시그니처 메서드를 상속받을 때 따르는 3가지 규칙
1. 클래스는 항상 이긴다. 클래스나 슈퍼클래스에서 정의한 메서드가 디폴트 메서드보다 우선권을 갖는다.
2. 1번 규칙 이외의 상황에서는 서브인터페이스가 이긴다. 상속관계를 갖는 인터페이스에서 같은 시그니처를 갖는 메서드를 정의할 때는 서브인터페이스가 이긴다. 즉, B가 A를 상속받는다면 B가 A를 이긴다.
3. 여전히 디폴트 메서드의 우선순위가 결정되지 않았다면 여러 인터페이스를 상속받는 클래스가 명시적으로 디폴트 메서드를 오버라이드하고 호출해야 한다.
'모던자바인액션' 카테고리의 다른 글
챕터[15] CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 (0) 2020.10.21 챕터[14] 자바 모듈 시스템 (0) 2020.10.21 챕터[12] 새로운 날짜와 시간 API (0) 2020.10.21 챕터[11] null 대신 Optional 클래스 (0) 2020.10.21 챕터[10] 도메인 전용 언어 DSL (0) 2020.10.21