자바

JAVA 자바 디폴트 메서드와 인터페이스 확장 - 디폴트 메서드의 필요성

알통몬_ 2017. 3. 13. 10:18
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

디폴트 메서드와 인터페이스 확장

 디폴트 메서드는 인터페이스에 선언된 인스턴스 메서드이기 때문에 구현 객체가 있어야 사용할 수 있습니다. 

선언은 인터페이스에서 하고 사용은 구현 객체를 통한다는 것이 약간은 어색해 보이죠?

 디폴트 메서드는 모든 구현 객체에서 공유하는 기본 메서드처럼 보이지만, 

인터페이스에서 디폴트 메서드를 허용한 데에는 다른 이유가 있습니다.


디폴트 메서드의 필요성 

 디폴트 메서드를 허용한 이유 : 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해서 입니다. 

기존 인터페이스의 이름과 추상 메서드의 변경 없이 디폴트 메서드만 추가할 수 있기 때문에 

이전에 개발한 구현 클래스를 그대로 사용할 수 있고, 

새롭게 개발하는 클래스는 디폴트 메서드를 사용할 수 있습니다.


예제

기존 인터 페이스

public interface MyInterface {

public void method1();

}


기존 구현 클래스

public class MyClassA implements MyInterface {

@Override

public void method1() {

System.out.println("MyClassA-method1() 실행");

}

}


수정 인터페이스

public interface MyInterface {

public void method1();

public default void method2() {

System.out.println("MyInterface-method2 실행");

}

}


새로운 구현 클래스

public class MyClassB implements MyInterface {

@Override

public void method1() {

System.out.println("MyClassB-method1() 실행");

}

@Override

public void method2() {

System.out.println("MyClassB-method2() 실행");

}

}


디폴트 메서드 사용

public class DefaultMethodExample {

public static void main(String[] args) {

MyInterface mi1 = new MyClassA();

mi1.method1();

mi1.method2();

MyInterface mi2 = new MyClassB();

mi2.method1();

mi2.method2();

}

}

반응형