[JAVA] 자바의 default method

2025. 2. 24. 23:09·JAVA

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
'JAVA' 카테고리의 다른 글
  • [JAVA] Comparable과 Comparator를 이용한 객체 비교와 이해 및 차이점
의중
의중
  • 의중
    개발어려워
    의중
  • 전체
    오늘
    어제
    • 전체글 (30) N
      • Algorithm (12)
      • SSAFY (1)
      • 자료구조 (4)
      • 운영체제 (2)
      • JAVA (2)
      • ML, DL (0)
      • BackEnd (4)
      • DevOps (1)
      • 네트워크 (3)
      • DB, SQL (1) N
  • hELLO· Designed By정상우.v4.10.3
의중
[JAVA] 자바의 default method
상단으로

티스토리툴바