반응형
이전 포스팅에서는 Clean Architecture 개념 정리를 하였습니다.
이번에는 Android에서의 Clean Architecure는 어떠한 개념인지에 대해 정리해보려 합니다.
Android에서의 Clean Architecture 구조
위의 구조로, 기존 Clean Architecture와 거의 동일한 구조이고 이름만 다릅니다. 대략적인 데이터 흐름도 Presentation > Domain > Data > Domain > Presentation 으로 진행됩니다.
각 요소의 특징
Presentation
- UI 영역, 사용자가 보는 화면
- MVVM 패턴과 MVI 패턴이 혼합되어있음
- MVVM - Jetpack ViewModel : common UI state를 캡슐화하는데 사용됨, Kotlin Flow로 state를 알 수 있음
- MVI - 작업이 common UI state를 수정하고, Kotlin Flow를 활용해 화면에 새로운 state를 전달
- 하는 기능으로 나눈다면, View와 Presenter로 나눌 수 있다
- View : UI 화면 표시와 사용자 입력을 담당
- Presenter : 입력에 대한 액션을 어떻게 해야되는지를 담당
- 주요 Android Component
- View (Fragment)
- Kotlin Flow를 통해 상태를 관찰하고, Kotlin Flow에 의해 전달되는 상태를 변경
- 상태 변경에 의해 UI가 변경
- 사용자 액션을 ViewModel에 전달
- ViewModel
- Kotlin Flow로 상태를 View 전달
- 사용자 액션을 다룸
- ViewState
- StateTimeTravelDebugger
- 동작과 상태를 로깅
- NavManager
- NavHostActivity안의 모든 Navigation event를 다루기위한 singleton
- View (Fragment)
Domain
- 앱의 핵심적인 부분, 비즈니스 로직
- 다른 계층과 독립적
- 다른 계층(ex) Data의 데이터베이스)의 변화는 Domain 계층에 영향을 주지 않음
- 주요 Android Component
- UseCase
- 비즈니스 로직
- DomainModel
- 앱 안에 사용될 데이터의 핵심적인 구조(core structure) 정의
- Repository Interface
- Data 계층으로부터 독립적이게 하기 위한 Interface
- UseCase
Data
- 앱의 데이터를 관리
- 데이터 소스를 연결하고, 저장소를 통해서 Domain에 데이터를 제공
- 인터넷에서 데이터를 검색하거나 디바이스가 오프라인일 시 디스크 캐시를 전달
- 주요 Android Component
- Repository
- Mapper
- Data model을 Domain model에 매핑 (Domain 계층으로부터 Domain 계층을 독립적으로 하기위해)
반응형
'DEV > Android' 카테고리의 다른 글
[Android] Jetpack - Data Binding - 3 (0) | 2023.03.15 |
---|---|
[Android] Jetpack - Data Binding - 2 (0) | 2023.03.14 |
[Android] Jetpack - Data Binding - 1 (0) | 2023.03.11 |
[Android] Jetpack (0) | 2023.03.11 |
Clean Architecture (0) | 2023.03.11 |