2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

자바 8에서 인터페이스의 default 메서드란 무엇인가요?

_____
Q1: 자바 8에서 인터페이스의 default 메서드란 무엇인가요?
A1: 자바 8에서 도입된 인터페이스의 default 메서드는 인터페이스 내에 구현부를 가진 메서드입니다. 기본 구현을 제공하여, 해당 인터페이스를 구현하는 클래스가 반드시 이 메서드를 오버라이드하지 않아도 되도록 합니다.

Q2: default 메서드의 기본 문법은 어떻게 되나요?
A2: 인터페이스 내에서 메서드 선언 앞에 `default` 키워드를 붙이고, 중괄호 `{}` 안에 구현 코드를 작성합니다. 예:
```java
public interface MyInterface {
default void defaultMethod() {
System.out.println("This is a default method.");
}
}
```

Q3: 왜 default 메서드가 자바 8에서 도입되었나요?
A3: 기존에는 인터페이스에 새로운 메서드를 추가하면, 이를 구현하는 모든 클래스가 해당 메서드를 구현해야 하는 호환성 문제가 있었습니다. default 메서드는 기존 구현에 영향을 주지 않고 인터페이스에 새 기능을 추가할 수 있게 해 줍니다.

Q4: default 메서드와 추상 메서드의 차이점은 무엇인가요?
A4: 추상 메서드는 인터페이스 내에 선언만 하고 구현이 없으며, 구현 클래스가 반드시 구현해야 합니다. 반면 default 메서드는 구현체를 가지므로 구현 클래스가 선택적으로 오버라이드할 수 있습니다.

Q5: 다중 인터페이스에 동일한 default 메서드가 있을 때 어떻게 되나요?
A5: 해당 인터페이스를 구현하는 클래스는 컴파일 에러가 나며, 반드시 어떤 메서드를 사용할지 명시적으로 오버라이드해서 해결해야 합니다. 이를 "default 메서드 충돌" 문제라고 합니다.

Q6: default 메서드는 어디에 사용할 때 유용한가요?
A6: 라이브러리나 API의 인터페이스를 기능 개선해야 할 때, 기존 사용자 코드를 깨뜨리지 않고 새 기능을 추가할 때 유용합니다. 또한 공통 기능을 인터페이스 레벨에서 제공하고자 할 때도 활용됩니다.

Q7: static 메서드와 default 메서드의 차이는?
A7: static 메서드는 인터페이스 이름으로 직접 호출하는 정적 메서드이고, default 메서드는 인터페이스를 구현한 인스턴스에서 호출하는 인스턴스 메서드입니다.

Q8: default 메서드는 인터페이스에서만 사용할 수 있나요?
A8: 네, default 키워드는 인터페이스 내부의 메서드에 대해서만 사용 가능합니다. 클래스에서는 일반 인스턴스 메서드를 구현하면 됩니다.

---

요약: 자바 8의 default 메서드는 인터페이스 내에 기본 구현을 가진 메서드로, 기존 인터페이스에 새 기능을 추가하면서 하위 호환성을 유지할 수 있도록 도와줍니다.
자바 8에서 도입된 `default` 메서드는 인터페이스에 구현을 제공할 수 있는 기능입니다.

이전 버전의 자바에서는 인터페이스는 오직 추상 메서드만 가질 수 있었지만, 자바 8부터는 `default` 키워드를 사용하여 인터페이스 내에 기본 구현을 포함할 수 있게 되었습니다.

이를 통해 인터페이스를 확장하면서도 기존의 구현에 영향을 주지 않고 새로운 기능을 추가할 수 있습니다.

`default` 메서드의 주요 특징1. 기본 구현 제공 : `default` 메서드는 인터페이스 내에서 직접 구현을 제공할 수 있습니다.

이를 통해 인터페이스를 구현하는 클래스는 이 메서드를 오버라이드하지 않고도 기본 동작을 사용할 수 있습니다.

```java public interface MyInterface { default void myDefaultMethod() { System.out.println("This is a default method."); } } ```2. 다중 상속 지원 : 자바는 클래스의 다중 상속을 지원하지 않지만, 인터페이스는 여러 개를 구현할 수 있습니다.

`default` 메서드를 사용하면 여러 인터페이스에서 동일한 메서드 이름을 가질 수 있으며, 이를 구현하는 클래스에서 어떤 메서드를 사용할지 명시적으로 선택할 수 있습니다.

```java public interface InterfaceA { default void myMethod() { System.out.println("InterfaceA's default method."); } } public interface InterfaceB { default void myMethod() { System.out.println("InterfaceB's default method."); } } public class MyClass implements InterfaceA, InterfaceB { @Override public void myMethod() { InterfaceA.super.myMethod(); // InterfaceA의 메서드 호출 // 또는 // InterfaceB.super.myMethod(); // InterfaceB의 메서드 호출 } } ```3. 코드 유지보수 용이 : 기존 인터페이스에 새로운 메서드를 추가할 때, 모든 구현 클래스에서 해당 메서드를 구현할 필요가 없으므로 코드 유지보수가 용이해집니다.

새로운 기능을 추가하면서도 기존의 코드에 영향을 주지 않게 됩니다.

4. 람다 표현식과의 결합 : 자바 8에서는 람다 표현식이 도입되었고, `default` 메서드는 이러한 기능과 잘 결합되어 함수형 프로그래밍 스타일을 지원합니다.

사용 예시아래는 `default` 메서드를 사용하는 간단한 예시입니다.

```javapublic interface Animal { default void makeSound() { System.out.println("Some sound"); }}public class Dog implements Animal { @Override public void makeSound() { System.out.println("Bark"); }}public class Cat implements Animal { // Cat 클래스는 makeSound()를 오버라이드하지 않음}public class Main { public static void main(String[] args) { Animal dog = new Dog(); dog.makeSound(); // 출력: Bark Animal cat = new Cat(); cat.makeSound(); // 출력: Some sound }}```위 예시에서 `Dog` 클래스는 `makeSound()` 메서드를 오버라이드하여 개의 소리를 출력하고, `Cat` 클래스는 기본 구현을 그대로 사용하여 "Some sound"를 출력합니다.

결론자바 8의 `default` 메서드는 인터페이스의 유연성을 높이고, 코드의 재사용성을 증가시키는 중요한 기능입니다.

이를 통해 개발자는 인터페이스를 설계할 때 더 많은 선택권을 가지게 되며, 기존 코드를 손상시키지 않고 새로운 기능을 추가할 수 있는 장점을 누릴 수 있습니다.

작성자: ㅁㅁ [비회원] | 작성일자: 1년 전 2024-08-26 08:28:20
조회수: 268 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.