•
이전에 설명했듯 요즘은 외부에서 만들어진 컴포넌트를 이용해 시스템을 구축하는 경향이 있다.
•
이와 관련해서 지금까지는 자바에서 특별한 구조가 아닌 평범한 자바 패키지 집합을 포함하는 JAR 파일을 제공하는 것이 전부였다.
•
이러한 패키지의 인터페이스를 바꿔야 하는 상황은 인터페이스를 구현하는 모든 클래스의 구현을 바꿔야 했으므로 여간 고통스러운 일이 아니었으나 자바 8, 9는 이 문제를 각각 다른 방법으로 해결했다.
•
자바 9의 모듈 시스템은 모듈을 정의하는 문법을 제공하므로 이를 이용해 패키지 모음을 포함하는 모듈을 정의할 수 있다.
•
자바 8에서는 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 지원한다.
•
디폴트 메서드는 특정 프로그램을 구현하는 데 도움을 주는 기능이 아니라 미래에 프로그램이 쉽게 변화할 수 있는 환경을 제공하는 기능이다.
•
자바 8은 이런 구현 클래스에서 구현하지 않아도 되는 디폴트 메서드를 인터페이스에 추가할 수 있게해준다.
•
메서드 본문({})은 클래스 구현이 아니라 인터페이스 일부로 포함된다.
•
디폴트 메서드를 이용하면 기존의 코드를 건드리지 않고도 원래의 인터페이스 설계를 자유롭게 확장할 수 있다. 자바 8에서는 인터페이스 규격명세에 default라는 새로운 키워드를 지원한다.
•
그런데 하나의 클래스에서 여러 인터페이스를 구현할 수 있다.. 그렇다면 다중 디폴트 메서드가 존재할 수 있다는 것은 결국 다중 상속이 허용된다는 의미일까?
•
엄밀히 말해 다중 상속은 아니지만 어느 정도는 그렇다고 말할 수 있다.