minOS

자바의 정석 ch7-39 인터페이스의 장점1 본문

TIL/남궁성의 자바의 정석

자바의 정석 ch7-39 인터페이스의 장점1

minOE 2024. 1. 8. 22:38
728x90

ch7-39 인터페이스의 장점 

- 두 대상(객체)간의 '연결,대화,소통'을 돕는 '중간 역할'을 한다.

기계가 바뀌어도 사용자에게 영향을 미치지 않으므로 변경에 유리하다.


- 선언(설계)와 구현을 분리시킬 수 있게 한다.
class B {
    public void method(){
        System.out.println("methodInB");
    }
}

 
위 코드는 인터페이스를 사용하여

interface I{
    public void method();
}

class B implements I{
    public void method(){
        System.out.println("methodInB");
    }
}

위와 같이 변경할 수 있다.
이렇게 변경하면 class B가 변경되어도 다른 클래스는 영향을 받지 않는다.


 1)직접적인 관과의 두 클래스 A-B 강결합(인터페이스 사용 x)

코드 예시)

class A{
    public void method(B b){
        b.methodB();
    }
}

class B{
    public void methodB(){
        System.out.println("methodB()");
    }
}
public class Main {
    public static void main(String[] args) {
        A a = new A();
        a.method(new B());
    }
}

출력


클래스 B를 다른 클래스 C로 바꾼다면 클래스 A도 변경해야만 한다.

class A{
    public void method(C b){
        b.methodB();
    }
}

class C{
    public void methodB(){
        System.out.println("methodC()");
    }
}


public class ChangeC {
    public static void main(String[] args) {
        A a = new A();
        a.method(new C());

    }
}

출력




2)간접적인 관계의 두 클래스 A-I-B 느슨한 결합 (인터페이스 I 사용)

코드 예시)

interface I {void methodB();}

class B implements I{
    public void methodB(){
        System.out.println("methodInB()");
    }
}

class A {
    public void methodB(I i){
        i.methodB();
    }
}


public class Main {
    public static void main(String[] args) {
        A a = new A();
        a.methodB(new B());
    }
}

출력

 

클래스 B를 다른 클래스 C로 바꿔도 클래스 A는 변경할 필요 없다.

interface I {void methodB();}

class C implements I{
    public void methodB(){
        System.out.println("methodInB()in C");
    }
}

class A {
    public void methodB(I i){
        i.methodB();
    }
}
public class ChangeC {
    public static void main(String[] args) {
        A a = new A();
        a.methodB(new C());
    }
}

 

출력

 

 

728x90