본문 바로가기
JAVA

[JAVA] Chapter 12. Abstract & Interface (2)

by varcode 2023. 7. 17.
반응형

① Loose Coupling
인터페이스를 사용하는 이유는 무엇일까? 바로 Loose Coupling 관계를 만들기 위해서이다. Loose Coupling Strong Coupling인데, 다음 코드를 살펴보자.

class LgTv {
    public void turnOn(){};
    public void soundUp(){};
    public void turnOff(){};
}

class SamsungTv {
    public void powerOn(){};
    public void volumeUp(){};
    public void powerOff(){};
}

코드를 살펴보면, 제조사가 달라서 메서드 이름이 다를 뿐 기능은 똑같다는 것을 알 수 있다.

class TvUser {
    LgTv tv = new LgTv();
    tv.turnOn();
    tv.soundUp();
    tv.turnOff();
}

만약 LG TV를 보던 사람이 Samsung TV로 바꾸었다면, method도 다 바뀐다. , 클래스를 바꾸었더니 메서드를 모두 수정해야 한다. 이것이 Strong Coupling 관계이다. Strong Coupling 관계가 생기는 이유는 dependency 때문이다. Strong Coupling이 있는 코드는 좋지 않은 코드이기 때문에 Loose coupling을 통해 의존성을 없애야 하는데, 이때 interface가 사용된다.

 

interface TV {
    public void powerOn();
    public void volumeUp();
    public void powerOff();
}

class LgTv implements TV {}
class SamsungTv implements TV {}

class TVUser {
    TV tv = new LgTv();
    tv.powerOn();
    tv.volumeUp();
    tv.powerOff();
}

TV interface로 만든 후 LgTv SamsungTvTV implements 하면, 반드시 메서드를 오버라이딩해야 하므로 메서드 이름이 동일해진다. 따라서 LG TV 대신 Samsung TV로 바꾸어도, 밑줄 친 Class 이름만 SamsungTv로 바꾸면 메서드는 바꿀 필요가 없다.

 

그렇다면, 추상 class가 아니라 interface를 사용하는 이유는 무엇일까?
인터페이스는 내부의 모든 메서드가 추상 메서드이기 때문에, 하위 클래스에서 모든 메서드를 구현해야 한다. 따라서 interface를 사용하면 오버라이딩에 강제성이 생긴다. 오버라이딩을 하도록 강제성을 부여하여 클래스가 바뀌어도 메서드가 안 바뀌는 loose coupling 관계를 만들어내는 것이다.
그 외에도 추상 클래스는 다중 상속이 허용되지 않고, 생성자와 인스턴스 변수를 가질 수 있지만, 인터페이스는 다중 상속이 가능하고 생성자와 인스턴스 변수를 가질 수 없다는(상수만 가능) 차이점이 있다.

 

반응형

'JAVA' 카테고리의 다른 글

[JAVA] Chapter 14. VO Class  (0) 2023.07.19
[JAVA] Chapter 13. Exception Handling  (0) 2023.07.18
[JAVA] Chapter 12. Abstract & Interface (1)  (0) 2023.07.16
[JAVA] Chapter 11. Inheritance (3)  (0) 2023.07.15
[JAVA] Chapter 11. Inheritance (2)  (0) 2023.07.14

댓글