1.Lifecycles(Easy handling lifecycles)
2.LiveData(Lifecycle aware observable)
3.ViewModel(Managing data in a lifecycle)
4.Room(object Mapping for SQLite)
5.Paging(Gradually loading information)
6.Databinding
7.Navigation
8.WorkManager
- Lifecycles (앱의 수명주기를 관리)
Lifecycles는 라이브러리 이름 답게 생명주기 모니터링을 돕습니다. 크게 2가지로 구성되어 있습니다.
- Lifecyle Owner : Activity, Fragment에서 생명주기를 분리하여 Lifecycle 객체에 담습니다. Lifecycle 객체를 통해 다른 곳에서 해당 화면의 생명주기를 모니터링 할 수 있는데 자신의 생명주기를 담은 Lifecycle 객체가 Lifecycle Owner 입니다.
- Lifecycle Observer : 생명주기를 Wrapping한 Lifecycle Owner 객체를 통해 화면 밖에서도 모니터링이 가능하지만, 생명주기에 따른 동작은 여전히 화면에서만 정의할 수 있습니다. 화면 밖에서도 생명주기에 따른 동작을 정의하기 위해서는 원하는 클래스에 LifecycleObserver 인터페이스를 구현하고 넘겨받은 Lifecycle Owner 객체에 구현한 LifecycleObserver를 등록해야 합니다. Lifecycle Observer를 구현한 클래스는 onResume() 등의 생명주기 메소드를 정의할 수 있습니다. 이 메소드들은 등록한 Lifecycle Owner가 해당 생명주기 상태가 되면 자동으로 수행되면서 객체가 화면과 동일한 생명주기를 가진 것처럼 행동합니다.
- LiveData
LiveData는 Observable의 형태로 사용하며, 안드로이드 Lifecycle에 따라 데이터를 관리합니다. Activity, Fragment의 라이프 사이클을 따르기에 활동에 대한 처리를 알아서 관리해줍니다.
Android 공식문서에서는 다음과 같은 장점을 확인할 수 있습니다.
- LiveData는 observable 패턴을 사용하기에 데이터의 변화를 구독한 곳으로 통지하고, 업데이트 한다.
- 메모리 누수 없는 사용을 보장한다.
- Lifecycle에 따라 LiveData의 이벤트를 제어한다.
항상 최신 데이터를 유지한다.
- 기기 회전이 일어나도 최신 데이터를 처리할 수 있도록 도와준다. (AAC ViewModel과 함께 사용시)
- LiveData의 확장을 지원한다.
- ViewModel
수명주기를 고려하여 UI관련 데이터를 저장하고 관리하도록 설계되었다. ViewModel 클래스를 사용하면 화면전환과 같이 구성을 변경할 때도 데이터를 보존할 수 있습니다.
ACC ViewModel이 데이터의 보존이 가능한 이유로는 ViewModel이 Activity의 경우 LifecycleEventObserver()로 Fragment에서는 FragmentStateManager로 View의 Lifecycle을 관찰하다 View가 종료되었을 때 Clear()를 하기 때문에 종료가 되기 전까지 데이터가 보존되는 것입니다.
- Room
-
SQLite 개체 매핑 라이브러리 입니다. Room을 사용하여 사용구 코드를 피하고 SQLite 테이블 데이터를 자바 객체로 쉽게 변환할 수 있습니다. Room은 SQLite 문의 컴파일 시간 확인을 제공하며 RxJavam, Flowable, LiveData, Observable을 반환할 수 있습니다.
-
Room의 구성요소 :
a. 데이터베이스 : 데이터베이스는 앱에 저장되어 있는 로컬 데이터에 대한 액세스 포인트를 제공해주는 역할
b. DAO(Data Access Object) : DAO는 앱에서 데이터베이스의 데이터를 추가, 삭제, 업데이트 작업을 할 수 있는 메소드를 제공해주는 역할, 그 외에도 다양한 쿼리 사용가능
c. Entity : 데이터베이스 내에 존재하는 테이블을 가리킵니다.
- Paging
페이징 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 대규모 데이터세트의 데이터 페이지를 로드하고 표시할 수 있습니다. 이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 모두 더 효율적으로 사용할 수 있습니다.
- Databinding
선언형 형식으로 Data를 UI에 쉽게 Binding하기 쉽게 해주며 findViewById에 의한 객체 획득 번거로움을 제거해주는 라이브러리 입니다.
- Navigation
사용자가 앱 내의 여러 콘텐츠를 Navigation(탐색)하고 그 곳에 들어갔다 나올 수 있게 하는 상호작용을 의미합니다. 또한 View의 흐름을 직관적으로 보여주기 때문에 앱의 동작흐름을 파악하는데도 도움이 됩니다.
- WorkManager
WorkManager는 지속적인 작업에 권장되는 솔루션입니다. 앱이 다시 시작하거나 시스템이 재부팅될 때 작업이 예약된 채로 남아있으면 그 작업은 유지됩니다. 대부분의 백그라운드 처리는 지속적인 작업을 통해 가장 잘 처리되므로 WorkManager는 백그라운드 처리에 권장하는 기본 API입니다.