/////
Search
Duplicate
5️⃣

디폴트 메서드와 자바 모듈

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