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 |