Juuunew 살아남기

[Spring] 객체지향 설계원칙 (SOLID) - 인터페이스 분리 원칙 ISP 본문

Framework/Spring

[Spring] 객체지향 설계원칙 (SOLID) - 인터페이스 분리 원칙 ISP

Juuunew 2022. 12. 19. 23:01

인터페이스 분리 원칙 - ISP

 

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.
  • 분리하면 정비 인터페이스 자체가 변경되어도 운전자 클라이언트에 영향을 주지 않음

클라이언트의 관심사에 따라 알맞게 인터페이스를 분리해주어야 하는 인터페이스 분리 원칙은 어떻게 보면 단일 책임 원칙과 상당히 유사하다고 생각된다. 

 

단일 책임 원칙과 개방-폐쇄 원칙에서 예시로 들었던 서비스 센터를 다시 한번 예시로 들어보려 한다.

 

public interface ServiceCenter {

    /**
     * 노트북
     */

    // 키보드
    void keyboard();

    // 모니터
    void monitor();

    // 트랙패드
    void trackpad();

    /**
     * 스마트폰
     */

    // 액정
    void display();

    // 볼륨업 키
    void volumeUp();

    // 볼륨다운 키
    void volumeDown();

    // 홀드 키
    void holdKey();

}

 

서비스센터 인터페이스에는 현재 노트북과 스마트폰 관련된 수리 기능들이 존재한다.

 

노트북 서비스센터 클래스가 구현체로써 해당 서비스센터 인터페이스를 구현을 한다면

 

public class LaptopServiceCenter implements ServiceCenter{

    @Override
    public void keyboard() {
        System.out.println("노트북 키보드 수리");
    }

    @Override
    public void monitor() {
        System.out.println("노트북 모니터 수리");
    }

    @Override
    public void trackpad() {
        System.out.println("노트북 트랙패드 수리");
    }

    @Override
    public void display() {
    }

    @Override
    public void volumeUp() {

    }

    @Override
    public void volumeDown() {

    }

    @Override
    public void holdKey() {

    }
}

 

현재 스마트폰 서비스센터의 액정 수리 기능이 엔지니어의 부재로 문을 닫아두었다고 생각을 해보자.

 

나는 노트북 수리 서비스를 받기 위해 방문하였는데 전혀 관계가 없는 스마트폰 서비스센터의 기능 부재로

 

노트북 서비스까지 받지 못하는 상황이 발생한다.

 

public interface LaptopServiceCenter {

    /**
     * 노트북
     */

    // 키보드
    void keyboard();

    // 모니터
    void monitor();

    // 트랙패드
    void trackpad();
}

public interface SmartphoneServiceCenter {

    /**
     * 스마트폰
     */

    // 액정
    void display();

    // 볼륨업 키
    void volumeUp();

    // 볼륨다운 키
    void volumeDown();

    // 홀드 키
    void holdKey();

}

 

이처럼 클라이언트의 관심사에 맞게 인터페이스를 분리해주어야 하는 것이 인터페이스 분리 원칙이다.

 

💡 공부 중 정리하는 내용이므로 부족한 부분이 있을 수 있습니다.

 

💡 참고자료

 

스프링 핵심 원리 - 기본편 (인프런 김영한)

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com