리셋 되지 말자

ISP - 인터페이스 분리 원칙 본문

Java(폐지)/객체지향 설계 5원칙-SOLID

ISP - 인터페이스 분리 원칙

kyeongjun-dev 2020. 7. 21. 12:06

"클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다." - 로버트 C. 마틴


인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다. - 위키백과

예시(책의 예시가 이해가 안가서 다른 사이트를 많이 찾아보고 혼자 생각해냄)

  • Action 인터페이스
package isp01;

public interface Action {
    public abstract void buy();
    public abstract void sell();
}

위와같은 인터페이스가 존재할 때, 구매자와 판매자를 구현한다고 가정한다.

  • Guest(구매자)
package isp01;

public class Guest implements Action{
    public void buy() {
        //물건 사기
    }

    public void sell() {
        //필요 없음
    }
}
  • Seller(판매자)
package isp01;

public class Seller implements Action{
    public void sell() {
        //물건 팔기
    }

    public void buy() {
        //필요 없음
    }
}

위처럼 구매자는 buy()라는 메서드만 필요함에도, sell()이라는 메서드를 강제로 구현해야 한다.
반대로 판매자는 sell()이라는 메서드만 필요함에도, buy()라는 메서드를 강제로 구현해야 한다.
-> 비록 비워두어도 되지만 빈 것도 구현이니....

이처럼 자신이 사용하지 않는 메서드를 구현하지 않도록 인터페이스를 세분화 하는 것이 ISP라고 이해했다.

이제 클래스가 사용하는 메서드만 구현하도록 인터페이스를 나누어야 한다.

package isp01;

interface Buy {
    public abstract void buy();
}

interface Sell{
    public abstract void sell();
}
  • 이렇게 나누면 아래와 같이 Seller와 Guest가 각각 필요한 메서드만 구현하면 된다.
package isp01;

public class Guest implements Buy{
    public void buy() {
        //물건 사기
    }
}
package isp01;

public class Seller implements Sell{
    public void sell() {
        //물건 팔기
    }

}

'Java(폐지) > 객체지향 설계 5원칙-SOLID' 카테고리의 다른 글

DIP - 의존 역전 원칙  (0) 2020.07.21
SRP와 ISP  (0) 2020.07.21
LSP - 리스코프 치환 원칙  (0) 2020.07.20
OCP - 개방 폐쇄 원칙  (0) 2020.07.20
SRP-단일 책임 원칙  (0) 2020.07.20
Comments