Java 인터페이스의 default 메서드

코딩Java
읽는데 7분 소요
처음 쓰여진 날: 2026-05-19
마지막 수정일: 2026-05-19
조회수:

요약

Java 8에서 도입된 인터페이스 default 메서드의 문법과, 여러 인터페이스에 같은 default 메서드가 있을 때 발생하는 충돌 해결법을 정리합니다.

핵심 정리

개념설명예시
default 메서드인터페이스 안에 본문을 가진 메서드 (Java 8 도입)default void sayBye() { ... }
재정의 (선택)구현 클래스가 부모의 메서드를 덮어쓰는 것(오버라이딩)@Override public void sayBye() { ... }
다중 구현 충돌두 인터페이스에 메서드 이름·매개변수가 같은 default가 있으면 컴파일 에러class C implements A, B
인터페이스.super.메서드()충돌 시 특정 인터페이스의 default를 직접 호출A.super.hello();

default 메서드란? 호기심

Java 8부터 인터페이스 안에 본문을 가진 메서드를 선언할 수 있습니다. 이것을 default 메서드라고 합니다. 메서드 선언 앞에 default 키워드를 붙이고, 중괄호 { } 안에 기본 구현을 작성합니다.

java
코드 하이라이팅 중...

default 메서드는 구현 클래스가 재정의하지 않아도 기본 동작을 제공합니다.

왜 Java 8에 도입되었나요?

Java 8 이전에는 인터페이스에 새 메서드를 추가하면 그 인터페이스를 구현한 모든 클래스가 컴파일 에러가 났습니다. 추상 메서드는 구현이 필수이기 때문입니다. 그래서 라이브러리가 한번 배포되면 새 메서드를 추가하기가 매우 어려웠습니다.

default 메서드 덕분에 인터페이스에 새 메서드를 기본 동작과 함께 추가할 수 있고, 기존 구현 클래스들은 그대로 두어도 컴파일 에러 없이 동작합니다. 대표적으로 Java 8에서 Collection1 인터페이스에 stream(), forEach() 같은 default 메서드가 추가되었습니다.

메서드 종류본문구현 필수?특징
추상 메서드없음 (;으로 끝)필수모든 구현 클래스가 반드시 작성
default 메서드있음 ({ }로 끝)선택기본 구현 제공, 필요 시 재정의

default 메서드 재정의 호기심

구현 클래스는 default 메서드를 선택적으로 오버라이딩해 다른 동작을 제공할 수 있습니다.

java
코드 하이라이팅 중...

재정의한 클래스에서 메서드를 호출하면 재정의된 구현이 실행되고, 재정의하지 않은 클래스에서는 인터페이스의 default 구현이 실행됩니다.


다중 인터페이스 default 충돌 호기심

한 클래스가 여러 인터페이스를 구현할 때 각 인터페이스에 이름·매개변수가 같은 default 메서드2가 있으면 어느 구현을 쓸지 모호해집니다. 이 경우 Java는 컴파일 에러를 발생시키고, 구현 클래스가 직접 해결하도록 강제합니다.

java
코드 하이라이팅 중...
다중 인터페이스 default 메서드 충돌 시각화
A와 B 둘 다 hello()를 들이밀면 C는 누구를 따라야 할지 모른다

인터페이스.super.메서드()로 해결

구현 클래스에서 해당 메서드를 직접 오버라이딩한 뒤, 필요하다면 인터페이스이름.super.메서드() 구문으로 특정 인터페이스의 기본 구현을 호출합니다.

java
코드 하이라이팅 중...
표현의미예시
super.메서드()부모 클래스의 메서드 호출 (상속에서 사용)클래스 Animal을 상속한 Dog 안에서 super.eat()으로 Animal의 eat() 호출
인터페이스.super.메서드()특정 인터페이스의 default 메서드 호출인터페이스 A를 구현한 C 안에서 A.super.hello()로 A의 default hello() 호출

해결 우선순위 규칙 호기심

Java가 default 메서드를 선택하는 순서:

default 메서드 해결 우선순위 다이어그램
클래스 > 하위 인터페이스 > 충돌이면 에러
  1. 클래스 우선: 클래스에서 직접 선언한 메서드나 상속받은 메서드가 있으면 인터페이스의 default보다 먼저 사용됩니다.

    java
    코드 하이라이팅 중...
  2. 더 구체적인 인터페이스 우선: 한 인터페이스가 다른 인터페이스를 extends 한다면, 하위 인터페이스의 default가 상위의 default를 가립니다.

    java
    코드 하이라이팅 중...
  3. 충돌이면 에러: 위 두 규칙으로 해결되지 않으면 컴파일 에러. 개발자가 직접 오버라이딩해야 합니다.

    java
    코드 하이라이팅 중...

연습 문제


Footnotes

  1. 리스트·집합·큐처럼 여러 값을 담는 자료구조들의 공통 인터페이스입니다. ArrayList, HashSet 등이 이를 구현합니다.

  2. 메서드의 이름과 매개변수 목록이 동일한 경우를 가리킵니다. 반환 타입은 포함되지 않습니다.


Java 인터페이스의 default 메서드 | 정처기 감자