인터페이스의 default 메서드
접근 제한자 default
- 보통 우리는 default를 접근 제한자로 많이 생각한다.
- 자바에는 접근 제한자가 총 4개로 제한 수준이 작은 순서대로 public, protected, default, private 가 존재한다.
- 그 중
default
는 같은 패키지 내에서의 접근을 허용하는 제한자 이다. - 접근 제한자를 별도로 설정하지 않는 경우 default로 설정된다.
간단히 상기만 하고 넘어가겠다.
인터페이스에서의 default 메서드
- JDK 8부터 인터페이스에 static 메서드와 default 메서드의 추가를 허용했다.
- 우리가 알던 접근 제한자와는 맥락과 목적이 완전히 다르다.
- 인터페이스는 원래 일반 메서드를 허용하지 않기에 모든 메서드를 구현체가 구현해야 했다.
- 그러나
default
메서드를 통해 해당 메서드를 구현체가 반드시 구현하지 않아도 되게 하며, 필요한 경우 오버라이드 할 수 있다. - 이는 인터페이스에 새로운 메서드를 추가할 때 기존 구현체에 영향을 미치지 않으면서도, 인터페이스를 확장할 수 있는 유연성을 제공한다.
default 메서드 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
interface Animal {
void eat();
// 인터페이스에 새로운 default 메서드 추가
default void sleep() {
System.out.println("This animal sleeps for 8 hours.");
}
}
class Dog implements Animal {
public void eat() {
System.out.println("Dog is eating.");
}
// 'sleep' 메서드를 오버라이드하지 않아도 됨. 'Animal' 인터페이스의 default 구현을 사용
}
class Cat implements Animal {
public void eat() {
System.out.println("Cat is eating.");
}
// 'sleep' 메서드를 오버라이드하여 구현을 제공할 수도 있음
public void sleep() {
System.out.println("This cat sleeps for 12 hours.");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat(); // Dog is eating.
dog.sleep(); // This animal sleeps for 8 hours. (Default 메서드 호출)
Animal cat = new Cat();
cat.eat(); // Cat is eating.
cat.sleep(); // This cat sleeps for 12 hours. (오버라이드된 메서드 호출)
}
}
누군가가 물어본다면
java 8부터 인터페이스에 default 메서드를 허용하여 인터페이스를 더 유연하게 만들었습니다.
접근제한자 default와는 다른 개념으로 기존 구현체에 영향 없이 인터페이스를 확장할 수 있는 유연성을 제공합니다.
접근제한자 default와는 다른 개념으로 기존 구현체에 영향 없이 인터페이스를 확장할 수 있는 유연성을 제공합니다.
This post is licensed under CC BY 4.0 by the author.