02. Single Responsibility Principle

Wonseok Lee·2021년 12월 14일
0

Design Patterns

목록 보기
2/6
post-thumbnail

Single Responsibility Principle

한 줄 요약하면, 하나의 class를 수정할 이유는 단 하나뿐이어야 한다.로 요약할 수 있다.

구체적인 설명을 위하여 아래 예제의 Employee class를 잘 살펴보자.

아래 Employee class는 2가지 역할을 하고 있는 것으로 볼 수 있는데, 하나는 salary_, schedule_과 같은 (1)정보를 관리하는 것, 다른 하나는 관리하고 있는 (2)정보들을 출력하는 것이다.

따라서, (1)관리하는 정보가 추가/삭제/변경될 때 또는 (2)출력해야하는 정보의 포맷(행정 서식으로 이해하자)이 바뀔 때 2가지 이유에 의해 Employee class가 수정될 여지가 있다.

class Employee
{
private:
  Salary salary_;
  Schedule schedule_;
public:
  void printSalary() const;
  void printSchedule() const;
};

반면, 아래와 같이 출력해야할 각 정보에 따라서 출력 기능을 별도의 class로 분리해 준다면, 보다 Single Responsibility에 부합하는 설계가 된다.

아래의 구현에서는 직원에 대해 관리할 정보가 추가/삭제/변경될 때는 Employee class를, 출력할 서식이 바뀔 때는 해당하는 *Printer class를 수정해주면 된다.

class Employee
{
private:
  Salary salary_;
  Schedule schedule_;
};

class SalaryPrinter
{
public:
  static void Print(const Salary& salary);
};

class SchedulePrinter
{
public:
  static void Print(const Schedule& salary);
};
profile
Pseudo-worker

0개의 댓글