※DIP(Dependency Inversion Principle)

: 객체들 간에 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것 보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙이다. 즉, 구체 클래스가 아닌 인터페이스나 추상 클래스와 의존 관계를 맺도록 설계해야 한다.

 

ex)아이가 장난감을 가지고 노는 경우 어떤 아이는 로봇 장난감을 가지고 놀고, 어떤 아이는 자동차 장난감을 가지고 놀 것이다. 이 때 실제 가지고 노는 구체적인 장난감은 변하기 쉬운 것이고, 아이가 장난감을 가지고 노는 사실은 변하기 어렵다. 그래서 DIP 규칙에 의거해 밑에와 같이 설계 가능하다.

 

 

 

※ISP(Interface Segregation Principle)

: 클라이언트에 특화되도록 기능을 분리시키라는 설계 원칙이다.

 

ex)

 

위 복합기 기능을 제공하는 클래스의 모든 기능을 각각의 클라이언트가 동시에 사용하는 경우는 없다. 클라이언트의 필요에 따라 프린터 기능만 사용하던지, 팩스 기능만 사용하던지, 복사기 기능만 이용할 수 있다. 따라서 프린터 기능만 이용하는 클라이언트가 팩스 기능의 변경으로 인해 발생하는 문제의 영향을 받지 않도록 해야 한다. 클라이언트와 무관하게 발생한 변화로 클라이언트 자신이 영향을 받지 않으려면 범용의 인터페이스보다는 클라이언트에 특화된 인터페이스를 사용해야한다.

 

ISP 규칙을 적용해 위와 같이 설계할 수 있다.

보통 GUI 상에서 이벤트 처리를 할 때 Event 핸들러 인터페이스를 상속받는 데 이런 인터페이스들이 ISP 규칙이 적용된 사례이다.

+ Recent posts