ISP (Interface Segregation Principle; 인터페이스 분리 법칙)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

 

 

 

 


범용 인터페이스

 

캐셔가 필요하지 않은 기능들을 포함한 계산기를 사용하고 있다.

 

 

 


인터페이스 분리

 

 

인터페이스를 작은 단위로 분리함으로 캐셔에게만 맞는 계산기와

신입생에거 필요한 계산기를 인터페이스를 가지고 있을 수 있게 되었다.

 

인터페이스를 작은 단위로 만들게 되면 사용성이나 확장성이 좋아진다.

 

 

 


FIN

 

사실 인터페이스를 범용으로 쓸 일이 없었다.

인터페이스를 사용보다 크게 만들어 문제되는 일도 없었다.

 

다른 포스팅들을 더 읽어보니

'SRP와 같이 인터페이스가 하나의 책임을 가져야 한다'

설명하는 경우가 지배적이다.

 

interface SmartPhoneFunction {
    
    fun call()
    fun sms()
    fun showInternet()
    
}

class SmartPhone : SmartPhoneFunction

 

interface CallFunction {
    fun call()
}

interface SMSFunction {
    fun sms()
}

interface InternetFunction {
    fun showInternet()
}

class SmartPhone : CallFunction, SMSFunction, InternetFunction

 

와 같이 분리하는 예시를 많이 보여준다.

 

이 예시가 더 잘 드러나 보인다.

 

하지만 위에 계산기 예시 역시

NormalCalculator는 기본적인 계산기의 책임을 다하고

ScientificCalculator는 공학 계산기의 책임을 다하는

SRP와 같은 맥락의 예시이다.

 

 

결론은 '인터페이스를 하나의 책임을 갖도록 분리해라.' 가 가장 적합해보인다.

 

 

SOLID에 대해 포스팅하면서 책임이라는 단어가 정말 많이 나온다.

 

그 만큼 중요하지만 책임의 크기를 정하는 것에 대해서도 고민해야할 것이다.

 

무조건 작고 많이 분리한다고 좋은 것도 아니다.

오히려 너무 많은 인터페이스와 클래스가 복잡도를 높일 수가 있다.

 

 

 

 

 

 

 

'SoftwareDesign' 카테고리의 다른 글

DIP  (0) 2020.03.01
LSP  (0) 2020.03.01
OCP  (0) 2020.03.01
SRP  (0) 2020.03.01
SOLID 개요  (0) 2020.03.01

+ Recent posts