"인터페이스 분리의 원칙"
"클라이언트에 특화된 여러개의 인터페이스가 하나의 범용 인터페이스 보다 낫다."

책에 글씨로 된 설명은 그럭저럭 이해를 하겠는데 그림으로 표현한 클래스 관계도를 보면 이해하기 어렵다.

그냥 내 맘대로 해석해봤다. 예를 들어서 아래와 같은 게시판 CRUD 서비스가 있다고 가정한다.
public interface BoardService {
public void regist(Board board);
public void update(Board board);
public Board read(Board board);
public void remove(Board board);
}

관리자 게시판 기능은 위 서비스 모두 사용이 가능하지만 "일반 사용자는 게시글 삭제 기능이 없다." 라고 한다면..
이런 상황에서 인터페이스를 분리해야 하는것 같다. 그렇다면 이런식으로 분리하면 된단 얘기인가..
public interface BoardService {
public void regist(Board board);
public void update(Board board);
public Board read(Board board);
}
public interface HiddenService {
public void remove(Board board);
}

관리자는 이런식으로 인터페이스를 구현할 것이고..
public class AdminBoardServiceImpl implements BoardService, HiddenService {
public void remove(Board board) { }
public void regist(Board board) { }
public void update(Board board) { }
public Board read(Board board) { return null; }
}

일반 사용자는 이런식으로 인터페이스를 구현할 것이다.
public class BoardServiceImpl implements BoardService {
public void regist(Board board) { }
public void update(Board board) { }
public Board read(Board board) { return null; }
}

아니면.. 인터페이스를 분리해서 한쪽이 상속받아야 하는것인가? 일단 인터페이스끼리의 상속..을해도 분리라고 해석했다.
public interface AdminBoardService extends BoardService {
public void remove(Board board);
}

이렇게 관리자 Interface를 새로 구성해서 관리자 클라이언트는 AdminBoardService에 의존하게 하는편이 맞는것 같다.
어차피 BoardService의 의미와 목적은 살아있고 LSP, DIP도 지켜지기 때문이다.

내 나름대로의 해석이라 확실하지 않다는점이 걸리긴 하다 &:D

'Design Patterns' 카테고리의 다른 글

"OCP", Open Closed Principle  (0) 2012.02.26
"LSP", Liskov Substitution Principle  (2) 2012.02.26
"DIP", Dependency Inversion Principle  (0) 2012.02.26
"SRP", Single Responsibility Principle  (0) 2012.02.25
High Cohesion, Low Coupling.  (0) 2012.02.25

+ Recent posts