1. Clean Architecture
본문의 내용은 유튜버 '리디의 삶은 개발'님의 "Clean Architecture 도대체 왜 쓰는거죠? | feat. MVC, MVVM, 클린아키텍쳐 | 주니어 개발자 꿀팁"을 참고했습니다.
1-1. 대출 앱 구조
대출 앱을 생각해보면, 크게 1) 대출하기 버튼, 2) 대출을 실행하는 비즈니스 로직, 3) 대출 정보를 저장할 공간으로 구성된다.

위의 그림을 코드로 바꾸면 아래와 같이 정의할 수 있다.
- Presentation 계층에는 대출하기 버튼인 UI와 버튼의 action을 받고 Domain과의 번역을 담당하는 Controller가 있다.
- Domain 계층에는 '대출한다'라는 애플리케이션 비즈니스 룰을 담은 UseCase와 핵심 기능을 가진 엔터프라이즈 비즈니스 룰을 담은 Entity로 나눌 수 있다.
- Data 계층에는 Repository가 있다.

1-2. 대출 앱 계층 동작 구조
- UI는 버튼 클릭 action을 Controller에게 전달한다.
- Controller에서는 대출 로직을 담은 UseCase를 실행한다.
- UseCase에서는 대출에 필요한 Entity들을 통해 최종 결정을 하고 대출이 실행된 후, Repository에 이를 반영한다.
- 필요에 따라, UseCase에서 변화된 값을 다시 Controller에 전달하고 이는 UI에 반영된다.

1-3. Clean Architecture 구조
- 위의 구조를 쉽게 표현하면 다음 그림과 같다.
- 바깥의 원인 InfraStructure는 쉽게 변경이 가능한 영역, 내부에 있는 Domain은 쉽게 변하지 않는 영역이다.
- 의존성은 원 외부에서 원 내부로 흐른다. 이 때문에 Domain은 외부 영향을 받지 않고 외부 영향을 알 필요 또한 없다.

- 위에서부터 이해하면서 따라왔다면, 아래의 Clean Architecture 구조는 훨씬 이해하기 쉬울 것이다.

1-4. Clean Architecture 이점
'소프트웨어를 계층으로 나누어 관심사를 분리함으로써' 다음과 같은 이득을 취할 수 있다.
1. 소스 코드 전반을 쉽게 파악 가능하다.
2. 수정 사항에 대한 대응이 쉬워진다.
3. 다른 계층에 영향을 주지 않는다.
4. 테스트가 쉬워진다.
5. 높은 응집도, 낮은 결합도를 통해 생산성 또한 향상된다.