이번에 회사에서 MVP 으로 짜여진 코드를 MVVM 으로 리팩토링해야하는 일이 생겨 제대로 개념을 잡고 가고자 한다
Clean Architecture
『클린 코드(Clean Code)』 를 저술한 로버트 마틴 (Robert C. Martin) 이 제안한 시스템 아키텍처로, 기존의 계층형 아키텍처가 가지던 의존성에서 벗어나도록 하는 설계를 제공합니다. 계층을 나누어 관심사를 분리하는 것에 초점을 두고, 각 분리된 계층마다 한 가지 역할만 하도록 구현하는 방식입니다.
개발을 하다보면 앱을 확장하고 앱의 유지보수 및 테스트를 위해 아키텍처를 정의하는 것이 중요하다는 것을 알 수 있다. 처음부터 아키텍처 구조를 정리하지않고 작업을 하면 유지보수에 많은 에로사항이 생긴다. (나중에는 쳐다보기도 싫어진다...)
그렇다면 Clean Architecture 는 이를 어떻게 구성하는지 알아보자.

프리젠테이션 계층 (Presentation Layer)
- 뷰(View) : 직접적으로 플랫폼 의존적인 구현, 즉 UI와 사용자 입력을 담당
- 프레젠터(Presenter) : MVVM 의 ViewModel 과 같이, 사용자 입력이 왔을 때 어떤 반응을 해야 하는지에 대한 판단을 하는 영역
도메인 계층(Domain Layer)
- 유즈 케이스(Use Case): 비즈니스 로직이 들어 있는 영역
- 모델(Entity): 앱의 실질적인 데이터
데이터 계층(Data Layer)
- 리포지터리(Repository): 유즈 케이스가 필요로 하는 데이터의 저장 및 수정 등의 기능을 제공하는 영역. 데이터 소스를 인터페이스로 참조하여, 로컬 DB와 네트워크 통신을 자유롭게 할 수 있음
- 데이터 소스(Data Source): 실제 데이터의 입출력이 여기서 실행됨