인터페이스 분리 원칙(ISP-Interface Segregation Principle)

uglyduck.dev·2020년 9월 27일
0

개념 모아 🗂

목록 보기
31/40

정의

  • 클라이언트 자신이 이용하지 않는 기능에는 영향을 받지 않아야 한다는 내용을 다루고 있음. 즉, 인터페이스를 클라이언트에 특화되도록 분리시키는 설계 원칙

ex) 복합기 (ISP 원칙 적용 전)
복합기의 클래스 다이어그램

  • 복합기 기능을 제공하는 클래스는 매우 비대해질 가능성이 큼
  • 모든 기능을 클라이언트가 동시에 사용하는 경우가 거의 없음
  • 필요에 따라 특정 기능만 이용
  • 범용 인터페이스보다는 클라이언트에 특화된 인터페이스를 사용해야 함

ex) 복합기 (ISP 원칙 적용 후)
복합기의 클래스 다이어그램

  • 복합기를 사용하는 객체들마다 자신이 관심을 갖는 메서드들만 있는 인터페이스를 제공받도록 설계
  • 인터페이스가 일종의 방화벽 역할을 수행함
  • 클라이언트 자신이 사용하지 않는 메서드에 생긴 변화로 인한 영향을 받지 않게 됨

SRP와 ISP 사이의 관계

  • 어떤 클래스가 단일 책임을 수행하지 않고 여러 책임을 수행하게 되면 방대한 메서드, 클래스, 인터페이스가 될 가능성이 커짐
    -> 단일 책임을 갖는 여러 클래스로 분할SRP하고 각자의 인터페이스를 제공해야 함

Q. ISP는 SRP를 만족하면 성립되는가?

A. 반드시 그렇다고는 볼 수 없다. 게시판을 예로 들자면,

  • 전제조건
    • 여러 기능을 구현한 메서드를 제공하는 클래스가 있음
    • 글쓰기, 읽기, 수정, 삭제를 위한 메서드가 제공됨
  • 성립
    • 일반 사용자는 게시판 삭제 기능 권한이 없음
    • 관리자는 게시판 삭제 기능 권한이 있음
      -> 게시판 클래스는 게시판에 관련된 책임을 수행하므로 SRP를 만족함
      but. 클래스의 모든 메서드가 들어 있는 인터페이스가 클라이언트에 상관없이 사용된다면 ISP에 위배됨

Reference

  • 정인상, 채흥석, 『JAVA 객체 지향 디자인 패턴』, 한빛미디어(2019.3.8), 124~127p
profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글