KoreanFoodie's Study
디자인 패턴 (GOF) #4 - Interface Segregation Principle (인터페이스 분리 원칙) 본문
Game Dev/Design Patterns
디자인 패턴 (GOF) #4 - Interface Segregation Principle (인터페이스 분리 원칙)
GoldGiver 2022. 6. 8. 08:33
GoF 의 디자인 패턴과 강의를 참고하여 디자인 패턴에 대한 내용을 정리하고 있습니다.
Interface Segregation Principle (인터페이스 분리 원칙)
인터페이스 분리 원칙, ISP 는 각 인터페이스가 사용하지 않는 메서드만 지원해야 함을 의미한다. 예를 들어, 프린트와 스캐너 기능을 하는 기계를 인터페이스로 구현했다고 하자.
struct IMachine
{
virtual void print(Document& doc) = 0;
virtual void fax(Document& doc) = 0;
virtual void scan(Document& doc) = 0;
};
struct MFP : IMachine
{
void print(Document& doc) override;
void fax(Document& doc) override;
void scan(Document& doc) override;
};
하지만 이런 식으로 코드를 짜게 되면, 분리되어서 관리되어야 할 print 기능과 scan 기능, 그리고 fax 기능이 섞여 분리하거나 조합( 예 : print 와 fax 만 되도록 ) 만들 수 없다.
대신 다음과 같이 의미를 명확히 함과 동시에, 인터페이스르 분리해주면 추후 재사용이 용이해진다.
struct IPrinter
{
virtual void print(Document& doc) = 0;
};
struct IScanner
{
virtual void scan(Document& doc) = 0;
};
struct Printer : IPrinter
{
void print(Document& doc) override;
};
struct Scanner : IScanner
{
void scan(Document& doc) override;
};
struct IMachine: IPrinter, IScanner
{
};
struct Machine : IMachine
{
IPrinter& printer;
IScanner& scanner;
Machine(IPrinter& printer, IScanner& scanner)
: printer{printer},
scanner{scanner}
{
}
void print(Document& doc) override {
printer.print(doc);
}
void scan(Document& doc) override;
};
// IPrinter --> Printer
// everything --> Machine
'Game Dev > Design Patterns' 카테고리의 다른 글
디자인 패턴 (GOF) #5 - Dependency Injection Principle (의존성 역전 원리) (0) | 2022.06.08 |
---|---|
디자인 패턴 (GOF) #3 - Liskov Substitution Principle (리스코프 치환 원칙) (0) | 2022.06.07 |
디자인 패턴 (GOF) #2 - Open-Closed Principle (개방-폐쇄 원칙) (0) | 2022.06.07 |
디자인 패턴 (GOF) #1 - Single Responsibility Principle (단일 책임 원칙) (0) | 2022.06.07 |
Comments