스터디를 진행 중인 모던 자바 인 액션을 보고 정리한 내용입니다.
디폴트 메서드란?
자바 8부터 지원하는 기능으로 인터페이스를 쉽게 변경할 수 있음
- 디폴트 메서드는 특정 프로그램을 구현하는 데 도움을 주는 기능이 아니라
- 미래에 프로그램이 쉽게 변화할 수 있는 환경을 제공하는 기능
위의 예제는 자바 8이 나오기 전에는 컴파일이 불가능한 코드
→ 자바 8 이전에는 List<T> (List가 구현하는 Collection<T>인터페이스 포함)가 stream이나 parallelStream 메서드를 지원하지 않았음
위를 해결하려면?
1. 직접 인터페이스를 만들기 (자바 8 설계자들이 했던 것처럼)
- Collection 인터페이스에
- stream 메서드를 추가하고 ArrayList 클래스에서 구현
🤔 이 방법의 문제
이미 컬렉션 API의 인터페이스를 구현하는 많은 컬렉션 프레임워크가 존재,
인터페이스에 새로운 메서드를 추가한다면,
인터페이스를 구현하는 모든 클래스는 새로 추가된 메서드를 구현해야 함
→ 감당 불가
2. 자바8의 디폴트 메소드 이용
- 디폴트 메소드: 구현 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 추가할 수 있는 기능으로,
- 메서드의 본문(body)는 클래스 구현이 아니라 인터페이스의 일부로 포함됨
🤗 디폴트 메소드를 이용하여
기존의 코드를 건드리지 않고로 원래의 인터페이스 설계를 자유롭게 확장 가능!
예시
⬇️ 자바 8에서는 List에 직접 sort 메서드 호출가능
List 인터페이스에 다음과 같은 디폴트 메서드 정의가 추가되었기 때문
→ 따라서 자바 8 이전에는 List를 구현하는 모든 클래스가 sort를 구현해야 했지만 자바 8부터는 디폴트 sort를 구현하지 않아도 됨
'JAVA 🎻' 카테고리의 다른 글
[JAVA] Reactive Streams, Back Pressure란? (0) | 2023.08.05 |
---|---|
[JAVA] JDBC란? (0) | 2023.06.04 |
[JAVA] 스트림 활용하기 (0) | 2023.03.04 |
[JAVA] Jsoup을 이용한 크롤링 (0) | 2023.02.21 |
[JAVA] 문자열 치환의 replace 메서드 (0) | 2023.02.12 |