[Java 추상화] Java 8의 Default Method 탄생 배경과 네이밍 충돌 해결 가이드
Java 8에서 도입된 default method의 탄생 배경과 네이밍 충돌 시 해결 방법을 설명하는 문서입니다.
Default Method 이전의 구현 방식
default method를 구현하기 위해서는 abstract class가 중간 과정에 추가!
- abstract class MouseAdaptor 는 implements MouseListener 를 구현
- MouseListener 는 interface 입니다. -> 제일 기본 틀 역할
- Interface 를 implements 하면서 default method를 만들 수 있는 곳!
- abstract class 는 구현체(default mehtod)를 만들 수 있으니까!
class MouseHandler2 는 extends MouseAdaptor(앞에서 만든) 를 상속.
- 핵심: 여기서 오버라이딩을 하지 않는다면 abstract MouseAdaptor에서 만든 method가 default method 역할이 되는 것!
- 오버라이딩 안했으니까 abstract MouseAdaptor에서 만든 기본 메소드를 사용하기 때문!
아래 Test 코드에서 click() 메소드를 사용하는데, 이 메소드가 default method !
자세한 것은 코드와 주석을 함께보면 이해 가능할 것이다.
참고) 물론 Java8 부터는 default method가 아예 추가가 되었음!
Default Method 네이밍 충돌
충돌 해결 방법
interface Interface1 {
default void m3() {
System.out.println("Interface1's m3");
}
}
interface Interface2 {
default void m3() {
System.out.println("Interface2's m3");
}
}
class MyClass implements Interface1, Interface2 {
@Override
public void m3() { // 반드시 오버라이드 필요
System.out.println("override m3");
}
}
💡 주의사항
- 동일한 이름의 default method가 여러 인터페이스에 존재할 경우 반드시 오버라이드 필요
- 단일 인터페이스의 default method는 오버라이드 선택적
default method의 도입으로 인터페이스 확장이 더욱 유연해졌으며, 기존 코드의 하위 호환성도 유지할 수 있게 되었습니다.
댓글남기기