[Android] Clean Architecture in Android

반응형

이전 포스팅에서는 Clean Architecture 개념 정리를 하였습니다.

 

Clean Architecture

개발자로써의 고민 개발자로써 가장 고민이 되는 것 중 하나가 바로 유지 보수 입니다.하나의 기능에 대해 일련의 과정을 거친 후 끝이 아닌 버그, 기능 개선 등의 유지 보수 활동이 이어질 것이

irregularly.tistory.com

이번에는 Android에서의 Clean Architecure는 어떠한 개념인지에 대해 정리해보려 합니다.

Android에서의 Clean Architecture 구조

출처 : https://www.youtube.com/watch?v=K1aC7eO6vbw

위의 구조로, 기존 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

 

Domain 

  • 앱의 핵심적인 부분, 비즈니스 로직
  • 다른 계층과 독립적
  • 다른 계층(ex) Data의 데이터베이스)의 변화는 Domain 계층에 영향을 주지 않음
  • 주요 Android Component
    • UseCase
      • 비즈니스 로직
    • DomainModel
      • 앱 안에 사용될 데이터의 핵심적인 구조(core structure) 정의
    • Repository Interface
      • Data 계층으로부터 독립적이게 하기 위한 Interface

 

Data

  • 앱의 데이터를 관리
  • 데이터 소스를 연결하고, 저장소를 통해서 Domain에 데이터를 제공
  • 인터넷에서 데이터를 검색하거나 디바이스가 오프라인일 시 디스크 캐시를 전달
  • 주요 Android Component
    • Repository
    • Mapper
      • Data model을 Domain model에 매핑 (Domain 계층으로부터 Domain 계층을 독립적으로 하기위해)

 

참조 : https://github.com/igorwojda/Android-Showcase

반응형

'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