두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간역할을 한다.
자판기의 껍데기! 컴퓨터의 GUI!
선언(설계, 껍데기)과 구현(알맹이)을 분리
느슨한 결합 : 인터페이스 덕분에 B가 변경되어도 A는 바꾸지 않아도 된다.
개발시간 단축
변경에 유리한 유연한 설계
표준화 가능 - JDBC 자바 인터페이스 집합
서로 관계없는 클래스들을 관계 맺기
class A{ //다른 클래스의 메소드 호출
public void method(I b) { //인터페이스 I 구현한 객체B, C만 들어갈 수 있음!!!
b.method();
}
}
//껍데기
interface I{
void method();
}
//알맹이
class B implements I{
public void method() {
System.out.println("B메소드 호출");
}
}
class C implements I{
public void method() {
System.out.println("C메소드 호출");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new B()); //A가 B, C를 사용(A가 B, C에 의존)
a.method(new C());
}
}
B메소드 호출
C메소드 호출
default
interface MyInterface{
void method(); //추상
default void newMethod() {}
//이런식으로 생략하면 안됨
}
여러 인터페이스의 디폴트메소드 간의 충돌
-> 인터페이스 구현 클래스에서 디폴트메소드를 오버라이딩
디폴트메소드와 조상클래스의 메소드 간의 충돌
-> 조상클래스의 메소드가 상속되고, 디폴트메소드는 무시
그냥 우리가 직접 오버라이딩하면 된다! 😉