Clients should not be forced to depend on methods that they do not use.
"Client는 사용하지 않는 method에 강제로 의존해서는 안된다."가 interface segregation principled(이하 ISP)의 정의입니다.
은행 ATM이 있다고 가정해봅시다. 은행 ATM의 주요 기능은 예금, 인출, 송금이 있고 각각의 transaction이 존재합니다. 각각의 기능마다 고객에게 금액을 요청을 해야하고 인출같은 경우 계좌에 있는 금액보다 더 많은 금액을 요청할 경우 잔액이 부족하다고 알려야 합니다.
위와 같이 각각의 transaction이 UI interface를 사용하여 고객에게 금액을 요청하거나 잔액 부족을 알리게 됩니다. 하지만 이와 같이 UI interface 하나에 모든 기능을 정의하게 되면 interface가 너무 커지게 됩니다. 이와 같은 interface를 fat interface라 부릅니다.
Fat interface는 아래와 같은 문제점들을 가지게 됩니다.
위의 ATM 예제에서 이러한 문제들을 해결하기 위해 interface를 transaction들에 필요한 기능들만 가지도록 나눌필요가 있습니다.
Interface를 transaction에 맞게 나누게 되면 transaction의 UI 동작을 수정하더라도 서로 영향을 끼치지 않고 새로운 기능의 UI를 추가하기 쉬워집니다.
[1] Robert Martin, Agile software development: principles, patterns, and practices (n.p.: Pearson, 2013), 135-145.
[2] Robert Martin, Clean Architecture: A Craftsman’s Guide to Software Structure and Design (n.p.: Prentice Hall, 2017), 83-86.