# 클린 코더스 13. SRP(Single Responsibility Principle)

### 하나의 객체는 하나의 책임만 갖는다.

![](https://2030515275-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoGscDSh7xEBr_oIADD%2F-LoGxhmairrYeCcrFEbE%2F-LoGxk0hv6-2dzg2vokm%2Fimage.png?alt=media\&token=80d9755f-0bde-4bf9-808d-ba41602034a9)

### EmployeeImpl Class 책임

EmployeeImpl 은 3개의 **책임**을 가지고 있으며 3개의 사용자에 의해 **변경의 근원**이 있다.

* CalculatePay
* Save/findById
* DescribeEmployee

### 책임을 발견하는 방법&#x20;

### 사용자가 특정 **역할**을 수행할 때 **Actor** 라고 부른다

![](https://2030515275-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoGscDSh7xEBr_oIADD%2F-LowOJ8L9kbQy-FCJmkz%2F-LowOLFQ5C-5_1ev3oJx%2Fimage.png?alt=media\&token=37a6da02-4e82-4b51-bbc6-04640e03eaeb)

역할은 Inverted Dependency 를 통해서 runtime 의존성을 가져야 한다.

### Inverted Dependency

![](https://2030515275-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoGscDSh7xEBr_oIADD%2F-LowOJ8L9kbQy-FCJmkz%2F-LowOxCX3UevgeMqr0cL%2Fimage.png?alt=media\&token=ec5bac19-23b2-44bc-b388-0156c26d4e06)

누가 변경을 유발하는 사용자인가?

사용자가 특정 **역할**을 수행할 때 **Actor** 라고 부른다\\

> 책임과 역할의 용어 해석

<div align="left"><img src="https://2030515275-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoGscDSh7xEBr_oIADD%2F-LoGxhmairrYeCcrFEbE%2F-LoGzXlxcJUC-GeFFr0n%2Fimage.png?alt=media&#x26;token=83fd08c9-df43-44e7-934b-994c22e8036d" alt="Strategy pattern"></div>

**책임**은 각각의 객체 ConcreateStrategyA, ConcreateStrategyB  이다.

하나의 책임만 가질 수 있다.

**역할**은 여러 책임을 가진 Context 객체이다.&#x20;

책임들의 추상화된 속성들을 가지며 역할을 수행한다.

<div align="left"><img src="https://2030515275-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoGscDSh7xEBr_oIADD%2F-LoGxhmairrYeCcrFEbE%2F-LoH-oumom9Gkp0NhTip%2Fimage.png?alt=media&#x26;token=9abb2841-9e6e-44d6-ba5b-421ed3787c60" alt="Template Method Pattern"></div>
