[5단원]5원칙 - ISP

인터페이스 분리 원칙 (interface Segregation Principle)

정의

  • 클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안된다
  • 하나의 인터페이스가 너무 많은 기능을 가지게 되면, 그 기능을 모두 사용하지 않는 클라이언트가 있는 경우 불필요한 의존성이 생김.

ISP와 단일 책임 원칙(SRP)

  • ISP(인터페이스 분리 원칙) 와 SRP(단일 책임 원칙) 은 둘다 클래스 or 객체가 가져야할 책임과 역할을 구분하는 데 중점을 둠.
  • SRP
    • 하나의 클래스가 하나의 책임만!
  • ISP
    • 인터페이스를 통해 여러 책임을 분리

예제

  • 남자 클래스 가 남자친구, 아들 , 사원, 소대원 등의 역할을 가진다고 가정
  • 다양한 책임을 가지는 것은 단일 책임 원칙에 어긋남.

단일 책임 원칙 적용

  • 남자 클래스를 여러 개의 클래스로 분화한다.
  • 각 클래스는 하나의 역할만을 담당

인터페이스 분리 원칙 적용

  • 남자 클래스를 토막 X
  • 여러 인터페이스를 만들어 각각의 역할 분리

여러 해결책

  • 단일 책임 원칙
  • 인터페이스 분리 원칙

은 각각 서로 다른 해결책을 제시함.

프로젝트 요구사항 혹은 개발자의 취향에 따라 어느 쪽을 선택할지 결정

그러나, 일반적으로 단일 책임 원칙 쪽이 더 좋은 해결책이 될 확률이 높다고 함.

최소주의 원칙

  • 인터페이스를 통해 메서드를 외부에 제공하는 경우 최소한의 메서드만 제공하라

최소주의 원칙의 근거

  • 상위 클래스는 풍성할 수록 좋고
  • 인터페이스는 작을 수록 좋은 이유가 뭘까
  • 빈약한 경우
    • 자다() 가 중복
    • 사람 슈퍼클래스로 타입을 선언하고, 학생 서브클래스로 객체를 생성한다면
      • 학생의 생일
      • 학번

      속성 뿐만아니라, 소개하다, 공부하다 등의 메서드를 사용할 수 없다.

      별도 다운캐스팅이 필요하게 된다.

    • 상속 의 장점을 누릴 수 없다.
  • 풍성한 경우
    • 공통적으로 메서드를 가진다.
    • 사람 김학생 = new 학생()
    • 사람 김군인 = new 군인()
      • 의 객체를 생성함
    • 사람 클래스의 모든 속성과 메서드를 사용할 수 있게 된다.
    • 학생은 학생의 특징적인 속성인 학번공부하다() 메서드만을 고유하게 가질 수 있으며
    • 학생의 특징적인 기능이나 속성을 사용할때만 다운캐스팅 하면되게 된다
    • 상속 의 장점을 누릴 수 있는 것이다.


Uploaded by N2T