Java

default 메소드

뽀루피 2024. 7. 17. 01:11

*예시

interface Vehicle {
    void start();
    void stop();

    default void honk() {
        System.out.println("빵빵!");
    }

    default String getVehicleType() {
        return "일반 차량";
    }
}

class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("자동차가 출발합니다.");
    }

    @Override
    public void stop() {
        System.out.println("자동차가 정지합니다.");
    }

    // getVehicleType() 메소드 오버라이드
    @Override
    public String getVehicleType() {
        return "승용차";
    }
}

class Truck implements Vehicle {
    @Override
    public void start() {
        System.out.println("트럭이 출발합니다.");
    }

    @Override
    public void stop() {
        System.out.println("트럭이 정지합니다.");
    }

    // honk() 메소드 오버라이드
    @Override
    public void honk() {
        System.out.println("트럭: 빵빵빵!!!");
    }
}

public class Main {
    public static void main(String[] args) {
        Vehicle car = new Car();
        Vehicle truck = new Truck();

        car.start();
        car.honk();  // 기본 구현 사용
        System.out.println("차량 유형: " + car.getVehicleType());  // 오버라이드된 메소드 사용

        truck.start();
        truck.honk();  // 오버라이드된 메소드 사용
        System.out.println("차량 유형: " + truck.getVehicleType());  // 기본 구현 사용
    }
}

 

default 메소드는 이처럼 구현 클래스에서 구현하지 않아도 되는 인터페이스 메소드이다.

물론 구현 클래스에서 오버라이드도 가능하다.

 

이전에는 인터페이스에 의존되어 있는 코드의 크기가 클 경우 인터페이스에 하나를 추가하려면 비용이 많이 발생했다. 

디폴트 메소드는 기존의 코드를 건드리지 않고도 원래의 인터페이스 설계를 자유롭게 확장할 수 있는 장점이 있어 현재 많이 활용되고 있다.