본문 바로가기
OOP/SOLID 원칙

ISP- 인터페이스 분리 원칙

by Box 2022. 1. 21.
728x90

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

인터페이스 분리 원칙은 "클라이언트는 자신이 사용하는 메소드에만 의존해야 한다."를 의미한다.
이를 쉽게 표현하면, "인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다."라고 바꿔 말할 수 있다

예시

자동차 인터페이스 → 운전 인터페이스, 정비 인터페이스로 분리
이렇게 분리함으로써 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음.

사용자 클라이언트 → 운전자 클라이언트, 정비사 클라이언트로 분리

ISP 예시

ISP를 적용하기 전

// ISP를 적용하지 않은 예제
interface multifunction {
  copy();
  fax(Address from, Address to);
  print();
}
class CopyMachine implements multifunction {

  copy() {
    console.log("### 복사 ###");
  }

  fax(Address from, Address to) {
    // 사용하지 않는 인터페이스가 변경되어도 함께 수정이 일어난다.
  }

  print() {
    // 사용하지 않는 인터페이스가 변경되어도 함께 수정이 일어난다.
  }
}

multifunction 인터페이스에 모든 기능들을 한 번에 넣었더니, CopyMachine을 구현하는데 필요없는 fax(), print()도 모두 구현해줘야 한다.
만약 multinfunction 인터페이스에서 fax()나 print()에 대해서 리턴 타입이 변경된다면, 이와 전혀 상관없는 CopyMachine 클래스도 같이 수정해줘야 하는 문제가 발생한다.

ISP를 적용한 이후

// ISP가 적용된 예제
interface Print{
	print();
}

interface Copy {
  	copy();
}

interface Fax {
  	fax(Address from, Address to);
}
class copyMachine implements Copy {
 
  copy() {
    console.log("### 복사 ###");
  }
}

이점

클래스에 필요한 메소드만 선언할 수 있습니다.
재사용성이 높아집니다.
용도가 명확한 인터페이스를 제공할 수 있습니다.

'OOP > SOLID 원칙' 카테고리의 다른 글

DIP- 의존역전 원칙  (0) 2022.01.21
LSP 리스코프 치환 원칙  (0) 2022.01.19
OCP-개방 폐쇄원칙  (0) 2022.01.19
SRP-단일 책임원칙  (0) 2022.01.09