Clean Architecture?
- 테스트하기 좋고 코드를 유지보수하기 용이하도록 관심사를 분리하여 개발하는 구조
- Data Layer
Domain 계층에 의존성을 가짐.
Database 또는 Remote와 통신하는 역할
- Data Source: Local(Room..), Remote(Retrofit..) 등에 관한 내용을 작성
- Repository(implements): Domain Layer의 repository interface의 구현체를 작성함. Remote와의 통신 코드를 작성
- Data Model: Repository에서 사용할 DTO를 작성
- Mapper: Data Model을 Entity에 맞게 변환시켜 주는 클래스
- Domain Layer
순수하게 Java 또는 Kotlin 코드로만 구성되며, 다른 계층 및 안드로이드에 의존성을 갖지 않음.
Usecase와 Repository interface, Entity 존재
- Usecase: 동작의 최소 단위 (ex. 로그인 동작, 사용자 목록을 가져오는 동작)
- Repository(interface): repository의 동작을 정의하는 interface
- Entity: 프로젝트에서 사용될 객체의 정의
- Presentation Layer
UI에 대한 처리를 담당하며 Domain 계층에 의존성을 가짐.
View, ViewModel, Presenter 등이 존재
Domain Layer의 Usecase를 의존성 주입을 통해 ViewModel에 주입하여 비즈니스 로직을 만듦.
직접 진행한 프로젝트에서 Clean Architecture를 적용한 구조 예시
Data Layer
DTO와 Retrofit interface가 포함된 remote 디렉토리, domain의 repository interface를 구현한 구현체를 작성한 repository 디렉토리가 존재
Di
의존성 주입을 위한 모듈들을 작성함.
Domain
프로젝트에서 사용될 Model들이 있는 model 디렉토리, repository의 동작을 설명한 interface가 존재하는 repository 디렉토리, 최소 동작을 나타내는 usecase를 모은 use_case 디렉토리가 존재
Presentation
Compose를 사용한 View와 ViewModel 등이 존재함.
https://github.com/FirstianB101/pullgo-android/tree/adapting_compose