경험의 기록

액티비티, 프래그먼트에 너무 많은 코드를 넣게 되면 점점 무거워져 다루기 힘들어지게 된다. 

 

  1. 앱이 카메라 인텐트를 트리거합니다. 그러면 Android OS에서 요청을 처리하기 위해 카메라 앱을 실행합니다. 이 시점에 사용자는 소셜 네트워크 앱에서 나간 상황이지만 사용 환경은 끊김 없이 연결됩니다.
  2. 카메라 앱은 파일 선택기 실행처럼 다른 인텐트를 트리거하여 다른 앱을 실행할 수도 있습니다.
  3. 이후에 사용자가 다시 소셜 네트워크 앱으로 돌아와서 사진을 공유합니다.

 

 

위는 구글에서 예시로 든 소셜 네트워크 앱에서 사진을 공유하면 어떻게 되는지에 대한 예제이다.

이 과정에서 언제든지 전화나 알림에 의해 사용 환경이 중단될 수 있다.

 

사용자는 이 중단에 대응하고 난 후에 사진 공유 프로세스로 돌아가서 작업을 계속할 수 있기를 원하기 때문에, 앱에서 이러한 흐름을 올바르게 처리해야 한다.

 

또한 휴대기기는 리소스가 제한되어 있으므로, 운영체제에서 새로운 앱을 위한 공간을 확보하도록 언제든지 일부 앱 프로세스를 종료해야 할 수 있다.

 

이러한 환경 조건을 고려해 볼 때 앱 구성요소는 개별적이고 비순차적으로 실행될 수 있으며, 운영체제나 사용자가 언제든지 앱 구성요소를 제거할 수 있다.

 

이러한 이벤트는 직접 제어할 수 없기 때문에 앱 구성요소에 앱 데이터나 상태를 저장해서는 안 되며 앱 구성요소가 서로 종속되면 안 된다.

 


그래서 MVVM 패턴을 사용하게 되는데, MVVM는 View - ViewModel - Model 의 구조로 각각의 역할을 분리하여 재사용성을 높이고 의존도를 줄이는 패턴이다. View는 데이터가 보여지는 부분, ViewModel은 View에 보여지는 데이터를 관리하는 부분, Model은 데이터를 가져오는 로직으로 볼 수 있다.
 안드로이드에서는 MVVM 패턴을 구현하기 위하여 AAC 를 제공한다.

 

 

※ AAC (Android Architecture Components)란?

  • Jetpack의 섹션 중 하나로 강력하고 테스트와 유지관리가 쉬운 앱을 디자인하도록 돕는 라이브러리
  • Lifecycle : 앱의 수명주기를 관리
  • Livedata : 기본 데이터베이스가 변경되면 뷰에 알리는 데이터 객체 빌드
  • ViewModel : 앱 회전 시 제거되지 않는 UI 관련 데이터 저장
  • Room : SQLite 개체 매핑 라이브러리
  • DataBinding : 프로그래매틱 방식이 아닌 선언적 형식으로 UI 구성요소를 앱의 데이터 소스와 매핑
  • Navigation : 프래그먼트의 진행을 보기 쉽게 정리해줌
  • Paging : 페이징 기법을 쉽게 적용
  • WorkManager : 지연 가능한 비동기 작업을 쉽게 에약할 수 있는 API

 

 

위는 구글에서 권장하는 아키텍쳐이다. 각 구성요소가 한 수준 아래의 구성요소에만 종속됨을 볼 수 있다.

 

 

 

Livedata, ViewModel, Lifecycle

2021.04.26 - [안드로이드/기본] - [Android] 안드로이드 View Model, LiveData (+DataBinding)

 

[Android] 안드로이드 View Model, LiveData (+DataBinding)

2021.04.19 - [안드로이드/기본] - [Android] 안드로이드 AAC & MVVM [Android] 안드로이드 AAC & MVVM 액티비티, 프래그먼트에 너무 많은 코드를 넣게 되면 점점 무거워져 다루기 힘들어지게 된다. 앱이 카메라.

hanyeop.tistory.com

 

Room

2021.05.11 - [안드로이드/AAC, MVVM] - [Android] Room 활용하여 데이터 저장하기

 

[Android] Room 활용하여 데이터 저장하기

안드로이드에서는 로컬 DB에 데이터를 저장하기 위해 SQLite를 지원한다. 허나 SQLite는 사용하기 복잡하여 어렵기 때문에 SQLite에 대한 추상화 레이어를 제공하는 Room 라이브러리를 지원한다. 2021.0

hanyeop.tistory.com

DataBinding 

2021.04.20 - [안드로이드/기본] - [Android] 안드로이드 DataBinding 사용하기

 

[Android] 안드로이드 DataBinding 사용하기

※ DataBinding 이란? 데이터와 뷰를 연결하는 작업을 레이아웃에서 처리 할 수 있게 해주는 라이브러리 findViewById (R.id.sample_text).apply { text = viewModel.userName } 예를들어, textView에 뷰모델에서..

hanyeop.tistory.com

Navigation 

2021.04.10 - [안드로이드/기본] - [Android] JetPack Navigation 사용하여 Fragment 관리하기

 

[Android] JetPack Navigation 사용하여 Fragment 관리하기

developer.android.com/guide/navigation/navigation-getting-started 탐색 구성요소 시작하기  | Android 개발자  | Android Developers 이 주제는 탐색 구성요소를 설정하고 사용하는 방법을 설명합니다. 탐색..

hanyeop.tistory.com

Paging

2021.06.15 - [안드로이드/AAC, MVVM] - [Android] Paging 3 라이브러리 사용해보기 - (1) 데이터 페이징하기

 

[Android] Paging 3 라이브러리 사용해보기 - (1) 데이터 페이징하기

❓ Paging이란 ▶ 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드할 때 일정한 덩어리로 쪼개서 로드하는 것 인터넷의 페이지를 생각하면 된다. 🔴 Paging3 아키텍

hanyeop.tistory.com

WorkManager

2022.11.19 - [Android/AAC, MVVM] - [Android] 안드로이드 WorkManager 활용한 주기적 백그라운드 작업

 

[Android] 안드로이드 WorkManager 활용한 주기적 백그라운드 작업

https://developer.android.com/topic/libraries/architecture/workmanager?hl=ko 앱 아키텍처: 데이터 영역 - WorkManager로 작업 예약 - Android 개발자 | Android Developers 데이터 영역 라이브러리에 관한 이 앱 아키텍처 가이

hanyeop.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

참조

developer.android.com/jetpack/guide

 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading