🫧 클린 아키텍처

로버트 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의 개수에 상관 없이 구독하는 것의 최신 값을 받는다
'개발일지 > Android' 카테고리의 다른 글
[Android] Jetpack Compose ViewModel 추가 (0) | 2023.08.07 |
---|---|
[Android] Compose - 이미지, 구분선, 텍스트, Preview, Button, 툴바 (0) | 2023.07.30 |
[Android] 클린 아키텍처 (Clean Architecture) (0) | 2023.07.18 |
[Android] Retrofit2 활용하여 API 연동 실전 예제 (0) | 2023.07.17 |
[Android] 4대 컴포넌트와 Intent (0) | 2023.03.26 |