인터페이스 분리 원칙은 인터페이스를 클라이언트에 특화되도록 분리시키는 설계 원칙이다.
프로그래밍도 잘하고 영어도 잘 구사하고 발표도 잘하는 다방면으로 소질이 많은 사람이 많아졌다.
그러나 실제 업무에서는 위에 모든 능력을 한꺼번에 요구하는 경우가 별로 없다.
위와 같은 능력자는 개발자로서의 역할이 필요할 때는 프로그래밍 능력만 사용한다.
해외 영업 사원으로서의 역할이 필요할 때 외국어 능력과 발표 능력을 사용한다.
능력자의 프로그래밍 능력에 변화가 생기더라도 외국어 능력이나 발표 능력을 사용하는 영업 업무에는 영향을 미치지 않는다.
하지만 높지만 개발 업무 부서에는 영향을 미칠 수 있다.
인터페이스 분리 원칙은 위와 같은 관점에서 생긴 객체지향 설계 원칙이다.
클라이언트 자신이 이용하지 않는 기능에는 영향을 받지 않아야 한다는 내용이다.
다음은 복합기의 클래스 다이어그램이다.
복합기 기능을 제공하는 클래스는 비대해질 가능성이 크다.
하지만 모든 기능을 클라이언트가 동시에 사용하는 경우는 거의 없다.
클라이언트의 필요에 따라 copy, fax, print 기능만 이용할 수 있다.
따라서 프린터 기능만 이용하는 클라이언트가 팩스 기능의 변경으로 인해 발생하는 문제의 영향을 받지 않도록 해야한다.
클라이언트와 무관하게 발생한 변화로 클라이언트 자신이 영향을 받지 않으려면 범용의 인터페이스보다 클라이언트에 특화된 인터페이스를 사용해야 한다.
ISP를 다르게 설명하면 인터페이스를 클라이언트에 특화되도록 분리시키라는 설계 원칙이라고도 할 수 있다.
복합기 클래스에 ISP를 적용하면 다음과 같다.
복합기를 사용하는 객체들마다 자신이 관심을 갖는 메서드들만 있는 인터페이스를 제공받도록 설계했다.
이런 설계는 인터페이스가 일종의 방화벽 역할을 수행한다.
클라이언트는 자신이 사용하지 않는 메서드에 생긴 변화로 인한 영향을 받지 않게 된다.