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

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

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

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

1
하나의 모듈은 하나의, 오직 하나의 사용자 또는 이해관계자에 대해서만 책임을 져야 한다.

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

징후1: 우발적 중복

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

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

징후2: 병합

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

해결책

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

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

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

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

결론

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

참조