java8 Default method

자바8에서 새로 추가된 Default method는 기존에 만들어진 interface를 implement 받는 class들에 영향을 주지 않고 interface에 새로운 항목을 추가할 수 있다.

기존에는 이미 생성된 interface에 새로운 method를 추가하려면 이를 implement 받는 모든 class들에도 Override를 해주어야 됬지만 Default method는 interface에 선언 할때에 body도 함께 만들어야 하므로 기본적으로 inerface에서 제공하는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void main(String...args){
new D().hello();
}

static interface A{
public default void hello(){
System.out.println("Hello from A");
}

public void world();
}

static interface B extends A { }

static interface C extends A {
}

static class D implements B, C {

@Override
public void world() {

}
}

위 코드에서 public default void hello() 이부분이 Default method를 구현한것이다. 꼭 body를 함께 생성해주어야 한다. body를 생성하지 않으면 error가 발생한다. 그리고 Default method 는 기존 interface와 마찬가지로 override 받을 수 있는데 override를 하여 새롭게 body를 구성하여 기존 interface 처럼 사용가능하다.

또한 interface는 여러개를 implement 받는것이 가능하므로 그동안 지원하지 않았던 다중상속의 기능을 Default method를 이용하여 사용 할 수 있다.

공유하기