ISP(Interface Segregation Principle)
객체는 자신이 호출하지 않는 메서드에 의존하지 않아야 한다는 원칙
상속할 객체의 규모가 불필요하게 너무 큼 ㅡ> 객체의 메서드를 작은 인터페이스로 나누어 구현 ㅡ> 각 객체가 필요한 인터페이스만을 상속하여 구현 ㅡ> 불필요한 메서드가 없이 필요한 메서드만 구현
코드 예제
ISP가 적용되지 않은 코드
class IOMachine{
public:
IOMachine(){}
void print(){
//기능 구현
}
void scan(){
//기능 구현
}
};
print, scan을 하나의 클래스에 모두 구현하고 보니 이를 상속하게 될 클래스에서는 프린터 종류여도 scan() 기능을 가지고 있게 되거나 스캐너 종류가 print() 기능을 갖게 되는 등 불필요한 기능들까지 가지게 되어 비효율적임.
ISP가 적용된 코드
class Printer{
public:
virtual void print()=0;
};
class Scanner {
public:
virtual void scan()=0;
};
class BasicPrinter : public:Printer{
public:
void print() override{
//기능 구현
}
};
class BasicScanner : public:Scanner{
public:
void scan() override{
//기능 구현
}
};
class MultiFunctionPrinter{
private:
Printer* printer;
Scanner* scanner;
public:
MultiFunctionPrinter(Printer* p, Scanner* s) : printer(p), scanner(s) {}
void print(){
if(printer) printer->print();
}
void scan(){
if(scanner) scanner->scan();
}
};
같은 클래스에서 함께 구현되었던 scan, print 기능을 분리하여 각각 인터페이스 형태의 클래스인 Printer, Scanner로 구현하고 이를 상속하는 개별 장치들을 클래스로 구현해서 프린터나 스캐너의 종류가 다양해 지더라도 기존 코드를 수정할 일 없이 새로운 클래스의 형태로 추가할 수 있게 되었습니다. 그리고 더 중요한 점은 각 장치들이 불필요한 메서드까지 상속 받는 경우가 없이 필요한 메서드만을 상속 받아 구현되었다는 것입니다.
정리
ISP를 적용하면 객체들은 반드시 필요한 기능만을 가지도록 설계되고 이를 통해 불필요한 기능이 상속, 구현되는 것을 방지한다. 특히, 큰 규모의 객체를 필요에 따라 작은 인터페이스들로 나누어 구현하면 새로운 기능이 추가될 때도 기존의 코드에서 수정할 필요 없이 새로운 객체를 생성하면 그만이니 코드의 확장성이 향상된다. ㅡ> OCP
* 인터페이스로 작게 나누어 구현! ㅡ> 확장에는 Open! 수정에는 Closed! (OCP)
참고자료
https://blog.itcode.dev/posts/2021/08/16/interface-segregation-principle
[OOP] 객체지향 5원칙(SOLID) - 인터페이스 분리 원칙 ISP (Interface Segregation Principle) - 𝝅번째 알파카
인터페이스 분리 원칙이란 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야한다는 원칙이다. 구현할 객체에게 무의미한 메소드의 구현을 방지하기 위해 반드시 필요한 메소드만을 상속
blog.itcode.dev
'OOP' 카테고리의 다른 글
[OOP] 디자인 패턴(Design Pattern) (0) | 2025.01.14 |
---|---|
[OOP] 객체 지향 설계 5원칙(SOLID) : DIP(Dependency Inversion Principle)-의존 역전 원칙 (0) | 2025.01.13 |
[OOP] 객체 지향 설계 5원칙(SOLID) : LSP(Liskov Substitution Principle)-리스코프 치환 원칙 (0) | 2025.01.09 |
[OOP] 객체 지향 설계 5원칙(SOLID) : OCP(Open Closed Principle)-개방, 폐쇄 원칙 (0) | 2025.01.08 |
[OOP] 객체 지향 설계 5원칙(SOLID) : SRP(Single Responsibility Principle)-단일 책임 원칙 (0) | 2025.01.06 |