05. Interface Segregation Principle

Wonseok Lee·2021년 12월 14일
0

Design Patterns

목록 보기
5/6
post-thumbnail

Interface Segregation Principle

한 줄 요약하면, 필요 없는 기능까지 구현하도록 강제하지 말라. 정도가 될 수 있다.

예를 들어, 어떤 센서 X가 데이터를 요청(Request)하면, 응답(Response)로 데이터를 준다고 하자.

이제, 일련의 센서 데이터 수신을 위하여 아래와 같은 interface와 class를 정의하였다.

아래 설계를 마친 뒤에, 이제 센서 Y가 시스템에 추가되는 상황을 가정해보자.

그런데, 애석하게도 이번에 추가된 센서 Y는 요청을 하지 않아도 계속 응답을 뿌리고 있는 유형의 센서라서, Request를 굳이 구현해줄 필요가 없다.

그럼에도 불구하고 interface 역할을 하는 SensorRequest가 존재하기 때문에 우리는 Y에 대해서도 아무 일을 하지 않을 Request stub를 만들어주어야 한다.

class Sensor
{
public:
  virtual void Request(const RequestFrame& req) const = 0;
  virtual void ReadResponse(ResponseFrame& res) const = 0;
};

class SensorX
{
  void Request(const RequestFrame& req) const;
  void ReadResponse(ResponseFrame& res) const;
};

반면, 아래와 같이 애시 당초 interface를 세분화 시켜 놓는다면 우리는 필요 없는 구현을 강제하지 않을 수 있다.

이와 같이 interface를 세분화해서 필요 없는 구현을 강제하지 않는 것이 Interface Segreagation의 핵심이다.

class Requester
{
public:
  virtual void Request(const RequestFrame& req) const = 0;
};

class Reader
{
public:
  virtual void ReadResponse(ResponseFrame& res) const = 0;
};

class SensorX : public Requester, Reader
{
public:
  void Request(const RequestFrame& req) const;
  void ReadResponse(ResponseFrame& res) const;  
};

class SensorY : public Reader
{
public:
  void ReadResponse(ResponseFrame& res) const;  
};
profile
Pseudo-worker

0개의 댓글