반응형
- 자바8 부터 지원되는 함수형 인터페이스를 조사하던 중.
- java.util.function 패키지 속에 열어보던 중.
- 인터페이스에 default로 선언된 함수가 있어서 바로 자료 조사에 들어갔다.
- 인터페이스
- 인터페이스는 기능에 대한 함수선언만 가능하지만, 기능을 구현한 함수는 포함될 수 없다.
- 하지만 이를 무시하고, 자바8 부터는 접근 제어자에 default를 명시하여 기능을 구현한 함수가 존재한다.
- 인터페이스에 default method 를 사용하게 된 배경은 무엇일까?
- 하위 호환성 / 개발 폐쇄 원칙(OCP:Open Close Principle)에 초점을 두고 보았다.
- 1개의 인터페이스에 n개의 구현클래스의 전제 아래,
- 인터페이스 기능(메서드) 추가될 경우, n개의 구현 클래스에는 기능(메서드)이 반드시 추가되어야 한다.
- 기존 기능을 유지하면서, 기능을 추가하는 호환성의 관점과
- 사용되지 않아도 되는 구현클래스의 변경에 대해서 OCP 원칙을 지킬 수 있다는 관점이다.
- 확장에는 열려(Open) 있고, 변경에는 닫혀(Close) 있다는 원칙.
- 하위 호환성 관점
자바의 Default Method (디펄트 메서드) (tistory.com)
- OCP 관점
디폴트 메서드(Default Method) (velog.io)
- 예제
interface DefaultI {
void newfunc();
default void oldfunc() {
System.out.println("oldfunc method!");
}
}
class DefaultImpl implements DefaultI {
@Override
public void newfunc() {
System.out.println("newfunc method!");
}
// oldfunc() 재정의 가능
}
반응형
'IT > Java' 카테고리의 다른 글
Spring Integration (0) | 2023.08.17 |
---|---|
[Java] java.nio.file.Files 클래스 (0) | 2022.10.31 |
[Java] NIO 기본동작방식 및 개념? (1) | 2022.10.11 |
[Java] Socket 통신 샘플 소스 (0) | 2022.10.06 |
enum 열거형 (0) | 2022.07.22 |
[람다식] JAVA에서의 람다식/기본편 (0) | 2022.07.08 |
[개발환경] 이클립스 / JDK (0) | 2022.06.20 |
1. 전자정부프레임워크 기본설정 (0) | 2020.05.19 |
MyBatis 동적쿼리 / #$ / include sql / property (0) | 2020.02.05 |
CORS / httpUrlConnection 예제 (0) | 2020.02.03 |