Search
Duplicate
🏩

10.ISP: 인터페이스 분리 원칙

: 정적 타입 프로그래밍 언어 환경 하에서
: User1, User2, User3가 OPS의 각 op1, op2, op3에 의존할 때,
: 표면상으로 User들은 OPS에 의존하게 되고, 이는 필요치 않은 기능까지 의존하게 될 가능성이 있다.
: 이 경우, op들 중 하나에 수정사항이 발생하면 이 영향이 다른 기능들에도 전이된다는 것
: 적절한 인터페이스 분리가 필요하다

ISP와 언어

: 앞서 예제에서 인터페이스 분리 원칙은 언어 타입에 의존한다, 구현되는 환경이 동적 타입 언어인지 정적 타입 언어인지에 따라 달라지는데
: 이는 동적 타입의 언어인 파이썬이나 루비같은 언어에선 소스 코드에 의한 선언문 include, import 등이 존재하지 않기 때문이다.
: 이로 인해 동적 타입의 언어를 사용하면 정적 타입의 언어를 사용했을 때보다 유연하며 결합도가 낮은 시스템을 만들 수 있다.
: 이러한 이유로 인해 ISP를 아키텍처로 보기보단 언어와 관련된 문제라고 결론내려지기도 한다.

ISP와 아키텍처

: ISP를 사용하는 근본적인 동기를 살펴보면 잠재되어 있는 우려사항을 살펴볼 수 있다.
: 일반적으로 필요 이상의 과도한 책임을 인터페이스에게 부여하는 것은 해로운 일이다.
: 소스 코드 의존성의 경우 이는 분명한 사실로 받아들여지는데, 불필요한 재배포와 재컴파일을 강요하기 때문이다. 이러한 폐해는 더 상위 개념인 아키텍처에서도 발생한다.
: System → Framework → Database 순으로 의존성을 가질때, Framework가 Database에 강한 결합도를 가지고 있다면 Database를 수정하려면 Framework의 수정도 불가피하다.

결론

: 불필요한 짐을 실은 무언가에 의존하면 예상치도 못한 문제에 빠진다는 것
: 하나의 인터페이스는 하나의 역할만 하게 두자