Java/8. 인터페이스 (Interface)
Day 11 : 디폴트 메소드의 필요성
pancakemaker
2021. 11. 2. 19:27
기존 인터페이스를 확장해서 새로운 기능을 추가할 때
디폴트 메소드는 추상 메소드가 아니기 때문에 구현 클래스에서 실체 메소드를 작성할 필요가 없음
기존 인터페이스
package sec07.exam01_why_default_mathod;
public interface MyInterface {
public void method1(); //추상 메소드
/*public default void method2() { //디폴트 메소드 추가하여 수정된 인터페이스
System.out.println("MyInterface-method2() 실행");
}
*/
}
기존 구현 클래스
package sec07.exam01_why_default_mathod;
public class MyClassA implements MyInterface {
@Override
public void method1() { //MyInterface의 추상메소드 재정의
System.out.println("MyClassA-method1() 실행");
}
}
수정 인터페이스
package sec07.exam01_why_default_mathod;
public interface MyInterface {
public void method1(); //추상 메소드
public default void method2() { //디폴트 메소드 추가하여 수정된 인터페이스
System.out.println("MyInterface-method2() 실행");
}
}
새로운 구현 클래스
package sec07.exam01_why_default_mathod;
public class MyClassB implements MyInterface {
@Override
public void method1() { //MyInterface의 추상메소드 재정의
System.out.println("MyClassB-method1() 실행");
}
@Override
public void method2() { //MyInterface의 default 메소드 Override
System.out.println("MyClassB-method2() 실행");
}
}
디폴트 메소드 사용
package sec07.exam01_why_default_mathod;
public class DefaultMethodExample {
public static void main(String[] args) {
MyInterface mi1 = new MyClassA();
mi1.method1(); //MyInterface의 추상메소드 -> MyClassA에서 재정의됨
mi1.method2(); //MyInterface의 default 메소드
MyInterface mi2 = new MyClassB();
mi2.method1(); //MyInterface의 추상메소드 -> MyClassB에서 재정의됨
mi2.method2(); //MyInterface의 default 메소드 -> MyClassB에서 재정의됨
}
}
MyClassA-method1() 실행
MyInterface-method2() 실행
MyClassB-method1() 실행
MyClassB-method2() 실행