이 글은 객체지향 5대 원칙, SOLID Principle 중 Interface Segregation Principle에 대해 다룬다.
정의
Interface Segregation Principle은 object는 자신이 사용하지 않는 method를 포함한 interface에 의존하면 안 된다는 원칙이다. 이 원칙은 dependency와 overhead에 대한 이야기이다.
언제 사용해야 할까?
만약 어떤 class C가 interface I를 implement하는 예시를 생각해 보자. interface I에는 method A, B, C 등 여러 가지 method가 있다. 그러나 class C는 method A밖에 사용하지 않는다. 이 경우 class C에서는 사용하지 않는 method B, method C를 구현해야 하며 만약 method B나 method C의 내용이 바뀐다면 interface I와 interface I에 의존성을 가지고 있는 class C 또한 재컴파일된 후 재배포되어야 한다.
- 재컴파일 후 재배포는 C++과 같은 static language에 한정되긴 한다. python과 같은 dynamic typed language는 runtime에 추론이 발생하기 때문에 재컴파일과 재배포가 필요 없다.
- java의 경우 static typed language이지만 method를 runtime에 결정하는 late binding을 수행하기 때문에 바뀐 코드만 재컴파일한다.
이런 경우 interface의 분리가 필요하다. interface I에서 method A만 있는 interface를 분리해야 한다.
이점
coupling 감소, cohesion 강화
Interface Segregation Principle을 준수하기 위해서는 큰 interface를 작은 interface로 나누어야 한다. 이로 인해 interface를 구현하는 class들 간의 dependency를 줄일 수 있을 뿐만 아니라, interface에 꼭 필요한 method들만 모이게 되므로 cohesion이 커진다.
유지보수성 증가
Interface Segregation Principle을 준수했다면 interface를 작게 분리하며 요구사항 변경 시 해당 interface만 수정하면 된다. 때문에 다른 기능이 영향을 받지 않기 때문에 유지보수성이 향상된다.
유의점
항상 그렇듯 적당히가 어렵다. interface를 너무 많이 쪼개버리면 코드의 재활용도 어려워지고 class architecture가 난잡해진다. 따라서 적당히 분리해야 한다. 따라서 Interface Segregation Principle이 적용된 많은 design pattern과 예시들을 보며 항상 더 좋은 방법이 없는지 끊임없이 고민해야 한다.
'CS > OOP' 카테고리의 다른 글
[OOP] SOLID 정리 (0) | 2023.03.12 |
---|---|
[OOP] SOLID - Dependency Inversion Principle (0) | 2023.03.12 |
[OOP] SOLID - Liskov Substitution Principle (0) | 2023.03.09 |
[OOP] SOLID - Open Closed Principle (0) | 2023.03.07 |
[OOP] SOLID - Single Responsibility Principle (0) | 2023.03.06 |