다수의 사용자가 OPS 클래스의 오퍼레이션을 사용한다.
User1 2 3은 오직 op1 2 3만을 사용한다고 가정하자.

그리고 OPS가 정적타입 언어로 작성된 클래스라고 해보자
이 경우 User1에서는 op2, op3을 전혀 사용하지 않음에도 User1의 소스코드는 두 메서드에 의존하게 된다.

이러한 의존성으로 OPS 클래스에서 op2의 소스코드가 변경되면 User1도 다시 컴파일 후 새로 배포해야 한다.
-> User1과 관련된 코드는 전혀 변경되지 않았더라도!

오퍼레이션을 인터페이스 단위로 분리하여 해결

ISP와 언어

앞의 예제는 언어 타입에 의존한다.
정적 타입 언어는 사용자가 import use include와 같은 타입 선언문을 사용한다.
이처럼 소스 코드에 포함된 선언문으로 인해 소스코드 의존성이 발생하고, 재컴파일해야 하는 상황이 무조건 온다.

파이썬/루비 같은 동적 타입 언어에서는 소스 코드에 이러한 선언문이 존재하지 않는다.
대신 런타임에 추론이 발생한다. 따라서 소스코드 의존성이 없고 재컴파일해야 하는 상황도 없다.

ISP와 아키텍처

ISP를 사용하는 근본적인 동기를 살펴보면, 다른 우려사항을 볼 수 있다.
일반적으로, 필요 이상으로 많은 걸 포함하는 모듈에 의존하는 것은 해롭다.
소스 코드 의존성의 경우 분명한데, 불필요한 재컴파일을 강제하기 때문이다.

저수준의 파일, 모듈 뿐만 아니라 고수준의 아키텍처 수준에서도 마찬가지다

System -> Framework -> Database

의 의존성을 가진다면, S는 D에 의존하게 된다.

D의 내부에서 사용하지 않는 기능이 변경되더라도, F를 재배포해야 할 수 있다.
F를 재배포하게 되면 S 역시 재배포 가능성이 존재한다.

+ Recent posts