인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않도록 해야 한다 (추상화)
인터페이스 분리 원칙은 객체가 자신의 책임이 아닌 행위를 물려 받지 않게 하는 것으로 각 책임별로 인터페이스를 나누어서 생성해야 한다는 것이다
만약 그렇지 않고 범용 인터페이스를 생성하면 나중에 코드의 유지보수가 어렵다
다른 원칙과의 관계
- SRP: SRP를 지키면 인터페이스도 단일 책임을 가지게 되어 ISP를 만족할 수 있습니다.
- OCP: 인터페이스가 잘 분리되어 있으면 새로운 기능을 추가할 때 특정 인터페이스를 확장하기 쉬워 OCP를 만족할 수 있습니다.
- LSP: 인터페이스가 잘 분리되어 있으면, 서브 클래스가 특정 인터페이스를 구현할 때 LSP를 지키기 쉽습니다.
- DIP: ISP를 지키면 의존성 주입 시 필요한 인터페이스만 의존하게 되어, DIP를 만족할 수 있습니다.
예시
OCP 에서 사용한 커피 주문 시스템을 예로 들자
만약 커피 주문 시스템에서 바리스타에게 차도 추가적으로 제조해해야 한다고 가정
1. ISP 원칙 위반
바리스타 자신이 만들 것을 확장 시켜야 하기 때문에 팩토리 인터페이스 CoffeeFactory에 makeTea() 라는
새로운 메서드를 생성하여 팩토리 클래스 Tea 를 생성해서 상속 받아 사용하려고 한다
이렇게 되면 makeTea() 와 관련 없는 EspressoFactory나 LatteFactory도 상속 받게 되지만 사용하지 않고
Tea 도 makeCoffee()를 상속 받지만 사용하지 않는다
즉, 관련 없는 메서드에 의존하게 되면서 ISP를 위반하고, 또한 SRP 원칙도 위반하게 된다
2. ISP 원칙
CoffeeFactory에 makeTea()를 생성하지 않고,
TeaFactory 라는 새로운 팩토리 인터페이스를 생성하여 Tea에게 상속하게 하여 인터페이스가 서로 분리 되도록 한다
'OOP' 카테고리의 다른 글
[OOP] 객체지향의 원칙 SOLID - 의존성 역전 원칙 (DIP) (0) | 2024.06.23 |
---|---|
[OOP] 객체지향의 원칙 SOLID - 리스코프 치환 원칙 (LSP) (0) | 2024.06.23 |
[OOP] 객체지향의 원칙 SOLID - 개방 폐쇄 원칙 (OCP) (0) | 2024.06.21 |
[OOP] 객체지향의 원칙 SOLID - 단일 책임 원칙 (SRP) (0) | 2024.06.21 |