본문 바로가기

소프트웨어

[소프트웨어/SOLID] 인터페이스 분할 법칙(ISP)


ISP(Interface Segregation Principle)

인터페이스를 클라이언트에 특화되도록 분리하자

만약 2개 이상의 많은 책임을 가지는 복합기를 클래스로 추상화한다고 하자.

복합기

  • 프린트
  • 복사
  • 팩스

복합기는 위와 같은 3개의 기능을 모두 가지고있다. 각각의 책임은 별도의 클래스로 나올 수 있지만 복합기의 측면에서 봤을 때에는 어쨋거나 SRP원칙을 만족한다.

하지만 다양한 클라이언트에서는 복합기의 일부분만 필요하다. 프린트 클라이언트는 프린트 기능만, 복사 클라이언트는 복사 기능만, 팩스 클라이언트는 팩스 기능만을 필요로 한다. 이 세 클라이언트가 복합기를 직접 참조하고 있는 경우 복합기의 기능이 추가되거나 변경되었을 때 영향을 받을 가능성이 있다.

따라서 복합기의 각각의 기능을 인터페이스화 하여 각 클라이언트가 인터페이스를 참조하고 있으면 복합기 클래스의 기능이 추가되거나 변경이 되어도 참조하고 있는 메서드나 규약이 변경되지 않아 영향이 적어진다. 더불어 추가적인 프린트 기능이 추가된다면 인터페이스를 수정하기 때문에 변경에 좀 더 안전하고, 테스트 가능한 클래스로 변화되어진다.