Google I/O 2017에서 새로운 라이브러리들을 Android Architecture Components(AAC)로 묶어서 발표하였습니다.
총 5개의 라이브러리로 이루어져 있습니다.
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)
LifeCycles는 생명주기 모니터링을 돕습니다. 크게 LifeCycleOwner와 LifeCycle Observer로 이루어져 있습니다. LifeCycles를 통해 우리는 화면 밖에서 화면의 생명주기를 모니터링 하고, 동작을 정의할 수 있습니다. 이는 더 직관적인 생명주기 프로그래밍을 가능하게 합니다.
LiveData는 데이터를 개선된 Observable로 Wrapping하여 생명주기와 데이터 변경을 인지할 수 있도록 합니다. LiveData의 장점으로는
이 있습니다.
수명주기를 고려하여 UI관련 데이터를 저장하고 관리하도록 설계되었습니다. ViewModel 클래스를 사용하면 화면전환과 같이 구성을 변경할 때도 데이터를 보존할 수 있습니다.
AAC ViewModel이 데이터의 보존이 가능한 이유로는 ViewModel이 Activity의 경우 LifecycleEventObserver()로 Fragment에서는 FragmentStateManager로 View의 Lifecycle을 관찰하다 View가 종료되었을 때 Clear()를 하기때문에 종료가 되지 전까지 데이터가 보존되는 것입니다.
SQLite 개체 매핑 라이브러리 입니다. Room을 사용하여 사용구 코드를 피하고 SQLite 테이블 데이터를 자바 객체로 쉽게 변환할 수 있습니다. Room은 SQLite 문의 컴파일 시간 확인을 제공하며 RxJavam, Flowable, LiveData, Observable을 반환할 수 있습니다.
Room 구성 요소
데이터베이스 : 데이터베이스는 앱에 저장되어 있는 로컬 데이터에 대한 액세스 포인트를 제공해줍니다.
DAO(Data Access Object) : DAO는 앱에서 데이터베이스의 데이터를 추가, 삭제, 업데이트 작업을 할 수 있는 메소드를 제공해주는 역할, 그 외에도 다양한 쿼리를 사용할 수 있습니다.
Entity : 데이터베이스 내에 존재하는 테이블을 가리킵니다.
페이징 라이브러리를 사용하면 로컬 저장소에서나 네트워크 를 통해 대규모 데이터세트의 데이터 페이지를 로드하고 표시할 수 있습니다. 이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 모두 더 효율적으로 사용할 수 있습니다.
레퍼런스
https://velog.io/@heetaeheo/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-AAC
https://medium.com/@maryangmin/android-architecture-components-%EC%86%8C%EA%B0%9C-1-8e04491be1f6