default method란
인터페이스는 기능에 대한 선언만 할 수 있기 때문에 메서드의 구현부가 있을 수 없다. 하지만!
default method는 자바 8부터 도입된 인터페이스의 기능으로 인터페이스 내에서 구현체를 제공하는 메서드이다.
인터페이스에 새로운 기능을 추가하면서도 하위 호환성을 유지할 수 있다 → 기존 인터페이스에 메서드를 추가해도 구현 클래스들이 해당 메서드를 구현할 필요가 없음.
default 키워드를 사용하여 선언하며 메서드 구현부를 가진다.
구현 클래스는 default method를 그대로 사용하거나 오버라이드하여 재정의 할 수 있다.
interface Vehicle {
void accelerate();
// default method
default void honk() {
System.out.println("빵빵!");
}
}
class Car implements Vehicle {
@Override
public void accelerate() {
System.out.println("자동차가 가속합니다.");
}
// honk() 메소드는 구현하지 않아도 됨
}
class Motorcycle implements Vehicle {
@Override
public void accelerate() {
System.out.println("오토바이가 가속합니다.");
}
// default method 오버라이드
@Override
public void honk() {
System.out.println("빠앙!");
}
}
왜 사용하느냐…
- 기존 인터페이스에 새로운 기능을 추가할 때, 해당 인터페이스를 구현한 모든 클래스를 수정하지 않아도 된다. → 특히 라이브러리나 프레임워크를 개발할 때 매우 유용하다고 한다.
- 이미 배포된 인터페이스에 새 메서드를 추가해야 할 때 기존 구현 클래스들이 깨지지 않도록 한다.
- 여러 구현 클래스에서 공통으로 사용할 수 있는 기능을 인터페이스 수준에서 한 번만 구현하도록 한다
- 자바에서는 클래스의 다중 상속이 불가능 하지만 인터페이스는 여러 개 구현할 수 있으므로 default method를 통해 유사한 효과를 얻을 수 있다.
예를 들면 Colleciton에서 stream 같은 default method가 추가됨으로써 기존 코드를 수정하지 않고도 모든 컬렉션에서 새로운 기능을 사용할 수 있게 되었다.
'JAVA' 카테고리의 다른 글
[JAVA] Comparable과 Comparator를 이용한 객체 비교와 이해 및 차이점 (0) | 2024.08.30 |
---|