클린아키텍쳐-단일책임원칙

단일책임원칙(SRP: The Single Responsibility Principle)

이름만으로 헷갈릴수가 있다 모듈이 하나의 일만 해야 된다는 것으로 하나의 일만 해야 되는것은 함수이다.

단일 모듈의 변경이유는 하나여야만 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
하나의 모듈은 하나의, 오직 하나의 사용자 또는 이해관계자에 대해서만 책임을 져야 한다.
```

모듈이란 무엇인가? 응집된 집합 단일 책임을 묶어주는 힘은 응집성이다.


### 징후1: 우발적 중복

서로 다른 액터가 의존하는 코드를 너무 가까이 배치해서 그렇다.

SRP에서는 서로 다른 액터가 의존하는 코드를 분리하라고 말한다.

### 징후2: 병합

서로 같은 코드를 수정할때 병합이 일어나는데 이때는 서로 다른 액터를 뒷바침 하는 코드를 서로 분리해야 한다.

#### 해결책

가장 확실한 해결책은 데이터와 메서드를 분리 하는 경우이다.

퍼사드 패턴을 많이 사용한다.

퍼사드 (프랑스어: façade[fəˈsɑːd] 영어: facade) 패턴 (외관 패턴)은 소프트웨어 공학 디자인 패턴 중 하나이다.
객체 지향 프로그래밍 분야에서 자주 쓰인다. Facade (외관) 는 “건물의 정면”을 의미한다.

퍼사드는 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체이다.

퍼사드는 소프트웨어 라이브러리를 쉽게 사용할 수 있게 해준다.
또한 퍼사드는 소프트웨어 라이브러리를 쉽게 이해할 수 있게 해 준다.
퍼사드는 공통적인 작업에 대해 간편한 메소드들을 제공해준다.
퍼사드는 라이브러리를 사용하는 코드들을 좀 더 읽기 쉽게 해준다.
퍼사드는 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜준다.
대부분의 바깥쪽의 코드가 퍼사드를 이용하기 때문에 시스템을 개발하는 데 있어 유연성이 향상된다.
퍼사드는 좋게 작성되지 않은 API의 집합을 하나의 좋게 작성된 API로 감싸준다.
래퍼(wrapper)가 특정 인터페이스를 준수해야 하며, 폴리모픽 기능을 지원해야 할 경우에는 어댑터 패턴을 쓴다.
단지, 쉽고 단순한 인터페이스를 이용하고 싶을 경우에는 퍼사드를 쓴다.


### 결론

단일 책임 원칙은 메서드와 클래스 수준의 원칙이다. 
컴포넌트 수준에서는 공통 패쇄 원칙, 아키텍쳐 수준에서는 아키텍쳐 경계의 생성을 책임지는 변경의 축이 된다.  

# 참조
-----
* [퍼사드 패턴 wikipedia](https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%82%AC%EB%93%9C_%ED%8C%A8%ED%84%B4)