티스토리 뷰
ISP( Interface Segregation Principle ) : 많은 클라이언트 고유의 인터페이스는 하나의 범용 인터페이스보다 우수하다. 즉, 거대한 클래스가 있다면, 그것을 쪼개라.
다음과 같은 코드가 있다.
public interface Worker { public void work(); public void eat(); }
public class Staff implements Worker { @Override public void work() { System.out.println("Staff가 일한다."); } @Override public void eat() { System.out.println("Staff가 먹는다."); } }
위 코드는 일하는 사람이라는 Worker인터페이스를 Staff라는 클래스가 구현하게 해두었다. Staff는 사람이기 때문에 일도 하고 먹기도 한다. 하지만, 로봇을 추가해서 일을 시킨다면, 로봇 또한, Worker를 구현해야하는데, 로봇은 먹지 않는다. 그러므로 이 구조는 ISP에 어긋나게 된다.
다음과 같이 코드를 바꾸어야한다.
public interface Eatable { public void eat(); }
public interface Workable { public void work(); }
다음과 같이 인터페이스를 나누고, 클래스가 구현하도록한다.
public class Staff implements Workable, Eatable { @Override public void work() { System.out.println("Staff가 일한다."); } @Override public void eat() { System.out.println("Staff가 먹는다."); } }
public class Robot implements Workable { @Override public void work() { System.out.println("로봇이 일을 한다."); } }
참고 : http://www.oodesign.com/Interface-segregation-principle.html
'Paradigm > OOP' 카테고리의 다른 글
[OOP] Law of demeter (0) | 2013.10.30 |
---|---|
[OOP] Dependency Inversion Principle (0) | 2013.10.29 |
[OOP] Liskov Substitution Principle (0) | 2013.10.29 |
[OOP] Single Responsibility Principle (0) | 2013.10.29 |
[OOP] Open-Closed Principle (0) | 2013.10.28 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday