ISP
인터페이스 분리 원칙
인터페이스 분리 원칙은 "클라이언트가 사용하지 않는 인터페이스를 구현하도록 강요해서는 안된다. 하나의 큰 인터페이스 대신 각각 하나의 하위 모듈을 제공하는 method 그룹을 기반으로 작고 많은 인터페이스가 선호된다."
인터페이스는 인터페이스를 구현하는 코드보다 인터페이스를 사용하는 코드와 더 밀접하게 관련되어 있어야 한다. 따라서 인터페이스의 method 는 class 가 구현하는 메서드가 아니라 클라이언트 코드에서 필요한 method 에 의해 정의됩니다. 그리므로 클라이언트가 사용하지 않는 인터페이스에 의존하도록 가요해서는 안된다.
class 와 마찬가지로 각 interface는 특정 목적/책임이 있어야한다. 개체가 해당 목적을 공유하지 않은 경우 인터페이스를 구현하도록 강요해서는 안된다. 인터페이스가 클수록 모든 구현자가 사용할 수 없는 method 가 포함될 가능성이 높아진다. 이것이 인터페이스 분리 원칙의 핵심이다. 아래는 ISP를 위반하는 예이다. TeamLead 및 Programmer 역할을 포함하는 IT회사를 위한 시스템을 구축하고자 한다. TeamLead는 커다란 작업을 작은 작업으로 나눌수 있어야하며 Programmer는 그것들을 수행할 수 있어야한다.
좋다. 위의 코드는 좋아보인다. 그리나 나중에 Manager라는 직책이 추가되었을 때 TeamLead에 작업 할당 및 실제 작업은 하지 않는다. 다음과 같이 ILead 에 Manager class를 구현할 수 있을까?
Manager는 실제 작업은 하지 않는다. 동시에 Manager에게 작업을 할당할 수 없으므로 WorkOnTask method 는 Manager class에 없어야 한다. 그리고나 우리는 ILead 인터페이스에서 이 class를 구현하고 있다. 구체적인 방법은 제공해야한다. 여기서 우리는 Manager clas가 목적없이 WorkOnTask() method 를 구현하도록 강제하고 있는 것이다. 이것은 잘못된 것이다. ISP를 위반한 디자인이다.
우리는 세가지 역할을 가지고 있다. 1.관리자는 작업을 나누어 할당할 수 있다. 2. TeadLead는 작업을 나누어 할당하고 실제 작업할 수 있다. 3. 작업만할 수 있는 Programmer 이것을 분리하여야한다.
==========================================================
Last updated