[Design Principle] Interface Segregation Principle

ErroredPasta·2022년 5월 21일
0

Design Principles

목록 보기
4/5

정의

Clients should not be forced to depend on methods that they do not use.

"Client는 사용하지 않는 method에 강제로 의존해서는 안된다."가 interface segregation principled(이하 ISP)의 정의입니다.

ATM UI

은행 ATM이 있다고 가정해봅시다. 은행 ATM의 주요 기능은 예금, 인출, 송금이 있고 각각의 transaction이 존재합니다. 각각의 기능마다 고객에게 금액을 요청을 해야하고 인출같은 경우 계좌에 있는 금액보다 더 많은 금액을 요청할 경우 잔액이 부족하다고 알려야 합니다.

위와 같이 각각의 transaction이 UI interface를 사용하여 고객에게 금액을 요청하거나 잔액 부족을 알리게 됩니다. 하지만 이와 같이 UI interface 하나에 모든 기능을 정의하게 되면 interface가 너무 커지게 됩니다. 이와 같은 interface를 fat interface라 부릅니다.

Fat Interface

Fat interface는 아래와 같은 문제점들을 가지게 됩니다.

  • Interface를 수정할 경우 해당 interface를 사용하는 모든 클래스들을 모두 수정해야 한다.
  • Interface에 새로운 method를 정의할 경우 기존에 해당 interface를 사용하는 클래스에 영향을 끼치게 된다.
  • 필요없는 method를 구현해야하는 경우가 발생한다.

위의 ATM 예제에서 이러한 문제들을 해결하기 위해 interface를 transaction들에 필요한 기능들만 가지도록 나눌필요가 있습니다.

Interface를 transaction에 맞게 나누게 되면 transaction의 UI 동작을 수정하더라도 서로 영향을 끼치지 않고 새로운 기능의 UI를 추가하기 쉬워집니다.

Reference

[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.

profile
Hola, Mundo

0개의 댓글