default 메소드

2024. 7. 17. 01:11·Java

*예시

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 메소드는 이처럼 구현 클래스에서 구현하지 않아도 되는 인터페이스 메소드이다.

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

 

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

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

'Java' 카테고리의 다른 글

정적 바인딩 & 동적 바인딩  (0) 2024.07.17
다중 상속  (1) 2024.07.17
static 메소드 vs 인스턴스 메소드  (0) 2024.07.17
이펙티브 자바 - Item(1) 생성자 대신 정적 팩터리 메소드를 고려하라  (0) 2024.07.15
Java CS 대비 정리(자료형, JVM, JRE, JDK)  (0) 2024.06.05
'Java' 카테고리의 다른 글
  • 정적 바인딩 & 동적 바인딩
  • 다중 상속
  • static 메소드 vs 인스턴스 메소드
  • 이펙티브 자바 - Item(1) 생성자 대신 정적 팩터리 메소드를 고려하라
뽀루피
뽀루피
  • 뽀루피
    뽀루피의 개발스토리
    뽀루피
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프로젝트 (3)
      • Java (32)
        • JPA (4)
        • Spring (8)
      • FrontEnd (4)
        • JavaScript (1)
        • Flutter (3)
      • DB (4)
        • SQL (4)
      • 알고리즘 (10)
      • Git (3)
      • SSAFY (0)
      • Figma (1)
      • Notion (0)
      • Jira (0)
      • 기획 (0)
      • 네트워크 (10)
      • 우아한테크코스 (2)
      • Infra (5)
        • AWS (0)
        • Docker (3)
      • AI (1)
      • 자격증 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    redis streams
    웹소켓
    Jenkins
    크래프트맨 멘탈리티
    자바
    fetch join
    네트워크
    Stomp
    n8n
    java
    JPA
    SQL
    네트워크 기초
    트랜잭션
    모던 자바 인 액션
    백준
    Docker
    알고리즘
    cloudflare
    스프링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
뽀루피
default 메소드
상단으로

티스토리툴바