JDK 1.8 이전에는 인터페이스에 추상 메서드만 사용할 수 있었다.
하지만, JDK 1.8 이후부터는 default 메서드와 static 메서드도 추가할 수 있게 되었다.
디폴트 메서드
인터페이스를 implements 하는 모든 클래스들은 모든 메서드를 구현해야 한다.
모든 메서드를 구현하는 것도 엄청 일이지만, 만약 인터페이스가 수정되거나 추가된다면 해당 인터페이스를 implements 하는 모든 클래스들도 수정되어야 한다.
이러한 문제점을 유연하게 해결하기 위해 default method 가 추가되었다.
default 메소드의 가장 일반적인 사용 목적은 구현 클래스를 파괴하지 않은채로 점진적으로 추가적인 기능을 제공한다는 것에 있다.
즉, 기존의 추상 메소드에 기능을 덧붙이는 목적으로 사용할 수 있다.
Static 메서드
https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html 를 읽어보면 helper method라고 표현하고, 예제 역시 interface 내에서 도와주는 역할로 표현하고 있다.
public class javaTest {
public static void main(String[] args) {
Cls c = new Cls();
c.test_0();
c.test_1();
c.test_2();
System.out.println(Inter_1.test_3());
}
}
class Cls implements Inter_1 {
@Override
public void test_0() {
System.out.println("Cls Overrid test_0");
}
@Override
public void test_1() {
System.out.println("default 메서드를 Override 한 후 수정");
}
}
interface Inter_1 {
//구현부가 없는 메서드
void test_0();
//default 메서드
default void test_1() {
System.out.println("default 메서드로 인터페이스 메서드를 추가1");
}
default void test_2() {
System.out.println("default 메서드로 인터페이스 메서드를 추가2" + test_3());
}
//static 메서드
static String test_3() {
return "static 메서드로 인터페이스 메서드를 추가";
}
}
간단히 테스트 해 본 예제인데, Interface를 추가로 더 만들어서 똑같은 이름의 default method를 추가하고 override 해보고 하니 이해가 더 쉽다.
'백문이불여일타!!'
* 여러 인터페이스의 default 메서드 간의 충돌 : 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야 한다.
* default 메서드와 조상 클래스의 method 간의 충돌 : 조상 클래스의 메서드가 상속되고, default 메서드는 무시된다.
'DEV > Java' 카테고리의 다른 글
[자바] Calendar (0) | 2023.02.02 |
---|---|
[자바] 사용자 정의 예외 만들기 (2) | 2023.02.01 |
[자바] 4. 배열 리스트 (0) | 2022.01.15 |
[자바] 3. 문자열 (1) | 2022.01.13 |
[자바] 2. 자료형 & 연산자 (0) | 2022.01.13 |
댓글