📖 Clean Architecture
📌 Clean Architecture
----------------------------------------------------------------
📌 Presentation Layer
├── UI와 같은 화면 표시 및 사용자 입력 처리하는 계층
├── 사용자가 버튼 누르면 ViewModel이 반응하고 UseCase를 실행
└── 즉, 사용자와 직접 만나는 앞 무대
----------------------------------------------------------------
📌 Domain Layer
├── 시스템의 비즈니스 로직 즉 앱의 핵심 로직이 들어있는 계층
└── 즉, 앱에서 진짜 하고 싶은 일로 핵심 뇌
----------------------------------------------------------------
📌 Data Layer
├── DB나 외부 API 등 데이터 소스와 관련된 작업을 처리하는 계층
├── 데이터를 어디서 가져올지 관리하는 계층
├── DataSource는 직접 통신해서 데이터 CRUD 기능 정리
├── Repository는 DataSource에서 받은 데이터 정리해서 Domain Layer에 넘기기
└── 즉, 백스테이지, 데이터 심부름꾼
----------------------------------------------------------------
📌 나누는 이유
├── 유지 보수 편함
└── 테스트가 쉬워짐
----------------------------------------------------------------
📌 Interface를 두는 이유
├── Domain은 interface만 알고 있고 Data Layer에서 interface를 실제로 구현
├── 주방장(Usecase)는 창고(Repository)가 어떻게 생겼는지는 모르고 창고 관리 규칙(Interface)만 알면 됨
├── Repository도 DataSource에 의존하지 않고 DataSource Interface를 둠
├── 창고(Repository)는 마트(DataSource)가 어떻게 운영되는지 몰라도 가져오는 방법(Interface)만 알면 됨
└── DataSource가 가져온 재료(DTO)를 창고(Repository)에서 손질해서 주방(UseCase)로 전달