티스토리 뷰

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