ISP(Interface Segregation Principle)
인터페이스를 클라이언트에 특화되도록 분리하자
만약 2개 이상의 많은 책임을 가지는 복합기를 클래스로 추상화한다고 하자.
복합기
- 프린트
- 복사
- 팩스
복합기는 위와 같은 3개의 기능을 모두 가지고있다. 각각의 책임은 별도의 클래스로 나올 수 있지만 복합기의 측면에서 봤을 때에는 어쨋거나 SRP원칙을 만족한다.
하지만 다양한 클라이언트에서는 복합기의 일부분만 필요하다. 프린트 클라이언트는 프린트 기능만, 복사 클라이언트는 복사 기능만, 팩스 클라이언트는 팩스 기능만을 필요로 한다. 이 세 클라이언트가 복합기를 직접 참조하고 있는 경우 복합기의 기능이 추가되거나 변경되었을 때 영향을 받을 가능성이 있다.
따라서 복합기의 각각의 기능을 인터페이스화 하여 각 클라이언트가 인터페이스를 참조하고 있으면 복합기 클래스의 기능이 추가되거나 변경이 되어도 참조하고 있는 메서드나 규약이 변경되지 않아 영향이 적어진다. 더불어 추가적인 프린트 기능이 추가된다면 인터페이스를 수정하기 때문에 변경에 좀 더 안전하고, 테스트 가능한 클래스로 변화되어진다.
'소프트웨어' 카테고리의 다른 글
[소프트웨어/팁] 좋은 글귀 모음 (0) | 2017.01.19 |
---|---|
[소프트웨어/SOLID] 의존 역전 원칙(DIP) (0) | 2017.01.18 |
[소프트웨어/SOLID] 리스코브 치환 법칙(LSP) (0) | 2017.01.18 |
[소프트웨어/SOLID] 개방 폐쇄 원칙(OCP) (0) | 2017.01.18 |
[소프트웨어/SOLID] 단일 책임 원칙(SRP) (0) | 2017.01.18 |