Default Method 란?
인터페이스는 기능에 대한 선언만 하기 때문에, 실제 코드를 구현한 로직은 포함될 수 없다. 하지만 자바 8에서 이러한 규칙을 깨는 기능이 나왔다. 그것이 Default Method(디폴트 메소드)이다. 메소드 선언 시 default를 명시하게되면 인터페이스 내부에서도 로직이 포함된 메소드를 선언할 수 있다.
** 접근 제어자에서 사용하는 default와 키워드가 같다. 하지만 접근 제어자에선 아무 것도 명시하지 않아도 'default'라고하고, 인터페이스의 default method는 'default'라는 키워드를 명시해야 한다.
1
2
3
4
5
|
interface TestInterface {
default void print() {
System.out.println("Hello world");
}
}
|
cs |
Default Method 사용 이유
인터페이스는 기능에 대한 구현보다, 기능에 대한 '선언'에 초점을 맞추어 사용한다. 기존에 존재하던 인터페이스를 이용하여 구현된 클래스를 만들고 사용하고 있는데 인터페이스 보완 과정에서 추가적으로 구현해야 할 혹은 필수적으로 존재해야 할 메소드가 있다면, 이 인터페이스를 구현한 클래스와의 호환성이 떨어지게 된다. 이 경우에 default 메소드를 추가하면 하위 호환성은 유지되고 인터페이스의 보완을 진행할 수 있다.
예를 들어 내가 만든 오픈 소스 코드가 유명해져서 전 세계 사람이 다 사용하고 있다. 그러던 중에 인터페이스에 새로운 메소드를 만들어야 하는 상황이 발생했다. 내가 만든 오픈소스를 사용하는 모든 사람들은 전부 오류가 발생할 수 있고 수정해야 할 것이다. 이 때 사용하는 것이 바로 default method이다.
다음은 디폴트 메소드로 정의된 인터페이스를 Car 클래스가 implements 하는 예제이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
interface Vehicle {
default void print(String str) {
System.out.println("I want to " + str);
}
}
class Car implements Vehicle {}
public static void main(String args[]) {
Car car = new Car();
car.print("Car");
}
//결과: I want to Car
|
cs |
회고
자바 8 이전까지는 객체지향설계에 얽매인 코딩을 했다면 이후부턴 좀 더 유연한 코딩이 가능해졌다. 단순히 실용성을 넘어 OCP(개방-폐쇄의 원리)와도 연관성이 있기 때문에 더욱 합리적인 코딩 방법이라고 할 수 있겠다.
'BackEnd > Java' 카테고리의 다른 글
[Java]@Transactionaleventlistener 다루기 (0) | 2023.09.15 |
---|---|
[Java] 싱글톤(Singleton)이란? (0) | 2022.10.10 |
[Java] 메소드 레퍼런스란? (0) | 2022.10.09 |
[Java] 함수형 인터페이스란? (0) | 2022.10.02 |
[JAVA] LinkedList의 개념 및 사용법 (1) | 2022.09.07 |
댓글