본문 바로가기

개발일지/Android

[Android] 클린 아키텍처 VS 구글 권장 아키텍처, MVVM 패턴

 

 

🫧 클린 아키텍처

 

로버트 C. 마틴에 의해 소개된
소프트웨어 시스템의 구조를 설계할 때 지켜야 할 원칙과 방법을 정의한 개념

소프트웨어의 유지보수성, 테스트 용이성 및 모듈 간의 분리를 강조하여 안드로이드 애플리케이션을 더 구조화된 방식으로 개발할 수 있도록 돕는다.

구글 권장 아키텍처와 차이점이라고 한다면, 도메인 레이어를 필수로 설계해야 한다는 것

 

 

 

  • 각 계층이 분리되어 있고 계층 간 의존성이 낮아 유지보수가 쉬움
  • 의존성을 주입하여 유닛 테스트 및 통합 테스트를 수행하기 용이
  • 각 계층이 자체 역할을 하여 코드의 재사용성이 높아짐

 

 

🕶️ 구글 권장 아키텍처

 

Google에서 공식적으로 권장하는 Android 앱 개발 방법론
Clean Architecture 와 비슷하게 구성될 순 있지만, 단 1가지의 차이점이라고 하면
도메인 레이어가 선택사항이다

즉, 모든 비즈니스 로직을 도메인 레이어에 넣지 않아도 된다 필요한 경우에만 도메인 레이어를 추가하여 사용할 수 있다

 

 

  • 도메인 레이어가 optional → 유닛 테스트 작성에 용이하다
    • ui 레이어와 domain 레이어 사이 직접적인 의존성이 없으므로
  • 빠르게 구현이 가능하다
    • 간단한 프로그램을 개발하기에 용이
  • 모듈이 늘어날 수록 모듈 복잡성 증가
  • 완전한 의존성 역전 원칙을 지키지 않음

 

 

 

🫧 MVVM(Model-View-ViewModel)

UI와 데이터를 분리함으로써 복잡한 애플리케이션을 더 쉽게 유지 보수할 수 있다
ViewModel은 다양한 뷰에서 재사용이 가능하다

 

 

Model

데이터와 비즈니스 로직을 담당.

  • 데이터클래스
  • 저장소(레포지토리)
  • 네트워크 서비스 계층

View

UI를 렌더링하는 인터페이스 구성 요소

  • UI 렌더링
  • 이벤트 처리
  • ViewModel 상태를 관찰하고 상태를 업데이트

ViewModel

View, Model 사이의 중개자 역할로, 뷰에 필요한 데이터를 공개하여 사용자 상호 작용 처리

  • LiveData를 통해 데이터 업데이트
    • 액티비티, 프래그먼트의 생명주기를 인식 → 메모리 누수 X
    • Observer를 통해 객체에 알려 UI와 데이터 상태 보장
    • LiveData는 Android 플랫폼에 종속적이기 때문에 UI가 없는 곳에서 LiveData를 사용하기가 어움
      • 즉, 아키텍처 패턴 관점에서는 단점이 존재
      • Presentation 레이어에서는 사용 가능하나, Domain에서는 불가능
  • StateFlow를 통해 데이터 업데이트
    • SharedFlow의 한 종류로, LiveData와 가장 가까움. LiveData를 대체 가능
    • 항상 오직 하나의 값을 가지고 있는 생성자로 초기상태가 필요함
    • 여러 collector를 지원하며 flow를 공유할 수 있음
      • collector의 개수에 상관 없이 구독하는 것의 최신 값을 받는다