✔️ 클린 아키텍처
https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html


- 소프트웨어 공학의 대가 로버트 C.마틴이 제시한 소프트웨어 디자인 철학
- 소프트웨어의 관심사를 계층별로 분리하여 코드 종속성이 외부로부터 내부로 의존하도록 하는 것이 주요 원칙
- 따라서 내부 계층의 코드는 외부 계층의 기능을 알 수 없고,내부 계층 코드에서는 외부 계층에 존재하는 함수, 클래스, 변수 등이 등장해선 안 된다
- SOLID 원칙 중 DIP(의존성 역전 원칙)를 따름
- 안쪽으로 갈수록 추상화 수준이 높아진다
- 가장 바깥쪽 원은 낮은 수준의 세부 사항이며, 안쪽으로 갈수록 추상화되고 상위 수준의 정책을 캡슐화한다, 가장 안쪽원이 가장 일반적이다.
- 클린 아키텍쳐의 이점
- 프레임워크에 독립적이다 : 프레임워크가 라이브러리에 의존하지 않음
- 테스트 용이성 : 비즈니스 규칙은 UI, 데이터베이스, 웹 서버등 기타 외부요소 없이 테스팅 가능
- UI 독립성 : UI의 변경이 시스템의 나머지 부분에 영향을 미치지 않음
- 데이터베이스 독립성 : 데이터베이스를 다른 것으로 바꾸어도 상관없음
- 외부 기능 독립성 : 비즈니스 규칙은 외부 기능에 대해 알지 못함
각 계층에 대해서 (Entities
, Use Cases
, Interface Adapters
, Frameworks and Drivers
)
Entities
- 소프트웨어 전체의 비즈니스 규칙을 캡슐화한다.
- 가장 일반적이고 상위 수준의 규칙을 캡슐화한다.
- 외부에서 무언가 변경이 될 때 변경될 가능성이 가장 낮다
- 비즈니스 로직을 위한 데이터의 구조나 함수의 집합 등을 포함하는 객체
- 모든 어플리케이션은 하나 이상의 비즈니스 로직을 갖고 있다. 번역기 앱이라면 번역, 메모장 앱이라면 메모가 비즈니스 로직이 된다.
- 네트워킹 혹은 DB 동작과 관련된 데이터 클래스가 이곳에 포함
Use Cases
- 어플리케이션과 관련된 특정 비즈니스 규칙을 포함하고, 시스템의 모든 Use Case 구현체들을 캡슐화하는 계층
- Entity로부터 비즈니스 로직을 처리