-두 대상(객체)간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.
- 변경에 유리하다. 바뀌어도 구현체만 바꿔서 선언해준다면 참조형은 바꿔주지 않아도 된다.
-선언(설계)와 구현을 분리시킬 수 있게 한다. (선언 껍데기 구현 알맹이)
interface I{
public void method();
}
class B implements I{
public void method(){
System.out.println("B class method");
}
public void Test(){
System.out.println("B class Test");
}
}
class C implements I{
//오류가 나게되거나 다른취급을 받는다.
//구현체는 절대. 인터페이스 메소드의 접근제어자보다
//범위가 작을수없다. 크다면 문제 없다.
private void method(){
System.out.println("C class method Test");
}
public void Test25(){
System.out.println("C class Test");
}
}
class A{//B클래스의 메서드 호출
public Void methodA(B b){
b.methodB();
}
}
class B{
public void methodB(){
System.out.println("MethodB()");
}
}
class InterfaceTesrt{
public void main(String args[]){
A a = new A();
a.mtehodA(new B());
}
}
class A{ // B와 관계없음
public Void methodA(I i){
i.method();
}
}
interface I{ void methodB();}
class B implements I{
public void method(){
System.out.println("MethodB()");
}
}
class C implements I{
public void method(){
System.out.println("MethodC()");
}
}
class InterfaceTesrt{
public void main(String args[]){
A a = new A();
a.mtehodA(new B());
a.mtehodA(new C());
}
}
1.무조건 있어야 하는것이라면 인터페이스를 생성하고 구현체에 구현하게 하며
구현체별로 필요한것을 따로 구현하게 하여 하나의 구현체에 변경이나 문제가
있어도 다른 구현체에는 아무런 문제가 없도록 할 수 있다.(느슨한 결합)
2.(느슨한 결합의 이유)B가 바뀌어도 C는 전혀 알지 못한다 I라는 큰 틀안에 B와 C는 따로 분리되어 포함되어있는것이다.
개발시간을 단축할수 있다.
인테페이스에 포함되어있다면 그 메서드만 넣어주면된다.
하지만 아니라면 실행할 클래스에 가서 그 클래스를 넣어주는 내용으로 변경하고
다시 돌아와서 사용할 클래스를 넣어주는 작업을 해야한다.
변경에 유리한 유연한 설계가 가능하다.