정처기 감자정처기 감자
Java객체지향

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

Java 인터페이스의 default 메서드

코딩Java
읽는데 7분 소요
처음 쓰인 날: 2026-05-19
마지막 수정일: 2026-09-25
조회수: —
선수학습(1개)
  • Java 인터페이스와 implements

요약

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

이 페이지는 기출 출제 이력이 없는 보충 페이지입니다
인터페이스의 default 메서드는 현재까지 정처기 실기 기출에 등장한 적이 없는 주제입니다. 핵심 기출 범위만 공부하고 싶다면 이 페이지는 건너뛰어도 됩니다. 최근 회차의 출제 범위가 점점 넓어지고 있어 어디서 나올지 예측하기 어렵기 때문에, 혹시 모를 출제에 대비해 추가한 페이지입니다.

핵심 정리

개념설명예시
default 메서드인터페이스 안에 본문을 가진 메서드 (Java 8 도입)default void sayBye() { ... }
재정의 (선택)구현 클래스가 부모의 메서드를 덮어쓰는 것(오버라이딩)@Override public void sayBye() { ... }
다중 구현 충돌두 인터페이스에 메서드 이름·매개변수가 같은 default가 있으면 컴파일 에러class C implements A, B
인터페이스.super.메서드()충돌 시 특정 인터페이스의 default를 직접 호출A.super.hello();
이 페이지는 기출이 없는 호기심 콘텐츠입니다
default 메서드는 현재까지 정보처리기사 실기에 출제된 적이 없습니다. 인터페이스 자체는 자주 출제되므로 인터페이스와 implements 페이지를 먼저 확실히 익혀 두세요.
'default 메서드'와 'default 접근 제어자'는 다른 개념입니다
이 페이지에서 다루는 default는 '인터페이스 안에서 본문을 가진 메서드'를 뜻합니다. 같은 패키지에서만 접근 가능한 default 접근 제어자(패키지 한정(package-private) 접근)와는 완전히 다른 개념입니다.

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
    코드 하이라이팅 중…
이름·매개변수가 같은 default가 여러 인터페이스에 있으면 반드시 오버라이딩
두 인터페이스에 동일한 default 메서드가 있고 한 클래스에서 둘 다 구현하면 Java는 자동으로 하나를 고르지 않습니다. 구현 클래스에서 해당 메서드를 직접 오버라이딩한 뒤, 필요하면 A.super.hello()처럼 원하는 구현을 선택해 호출하세요.

연습 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.

Footnotes

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

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


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • Java 람다 표현식과 함수형 인터페이스
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999