IT/Java

디폴트 메서드(default method)

상짱 2022. 7. 8. 16:55
반응형

- 자바8 부터 지원되는 함수형 인터페이스를 조사하던 중.

- java.util.function 패키지 속에 열어보던 중.

- 인터페이스에 default로 선언된 함수가 있어서 바로 자료 조사에 들어갔다.

 

- 인터페이스

 

- 인터페이스는 기능에 대한 함수선언만 가능하지만, 기능을 구현한 함수는 포함될 수 없다.

- 하지만 이를 무시하고, 자바8 부터는 접근 제어자에 default를 명시하여 기능을 구현한 함수가 존재한다.

 

- 인터페이스에 default method 를 사용하게 된 배경은 무엇일까?

 

- 하위 호환성 / 개발 폐쇄 원칙(OCP:Open Close Principle)에 초점을 두고 보았다.

- 1개의 인터페이스에 n개의 구현클래스의 전제 아래,

- 인터페이스 기능(메서드) 추가될 경우, n개의 구현 클래스에는 기능(메서드)이 반드시 추가되어야 한다.

- 기존 기능을 유지하면서, 기능을 추가하는 호환성의 관점과

- 사용되지 않아도 되는 구현클래스의 변경에 대해서 OCP 원칙을 지킬 수 있다는 관점이다.

- 확장에는 열려(Open) 있고, 변경에는 닫혀(Close) 있다는 원칙.

 

- 하위 호환성 관점

자바의 Default Method (디펄트 메서드) (tistory.com)

 

자바의 Default Method (디펄트 메소드)

Default Method 인터페이스는 기능에 대한 선언만 가능하기 때문에, 실제 코드를 구현한 로직은 포함될 수 없습니다. 하지만 자바8에서 이러한 룰을 깨트리는 기능이 나오게 되었는 데 그것이 Default

siyoon210.tistory.com

 

- OCP 관점

디폴트 메서드(Default Method) (velog.io)

 

디폴트 메서드(Default Method)

java 8 이 등장하면서 인터페이스(Interface) 개념에 디폴트 메서드(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() 재정의 가능
}

 

 

 

반응형