Android Architecture Component(AAC)
안드로이드 아키텍처 구성요소 는 테스트와 유지관리가 쉬운 앱을 디자인하도록 돕는 라이브러리 모음이다.
LiveData
개요
LiveData
는 관찰이 가능한(Observable) 데이터 홀더 클래스 이다. Activity, Fragment, Service와 같은 컴포넌트의 LifeCycle을 인식하며 LifeCycle 인식을 통해 활성 상태에 있는 컴포넌트의 Observer만 업데이트한다.
Observer
는 LiveData의 관찰자 이다. Observer의 Lifecycle이 STARTED
또는 RESUMED
상태이면 LiveData는 Observer를 활성 상태로 간주하여 업데이트 정보를 알린다.
장점
1. UI와 데이터 상태의 일치 보장
LiveData는 수명 주기 상태가 변경될 때 Observer
에 알리므로 변경이 발생할 때 마다 Observer
가 직접 UI를 업데이트할 수 있다.
2. 메모리 누출 없음
Observer
는 LiveData
에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제된다.
3. 중지된 활동으로 인한 비정상 종료 없음
Observer
의 수명 주기가 비활성 상태이면 어떤 이벤트도 수신하지 않는다.
4. 최신 데이터 유지
수명 주기가 비활성화된 경우 다시 활성화될 때 최신 데이터를 수신하며 항상 최신 데이터를 유지한다.
5. 싱글톤 패턴
LiveData
는 싱글톤 패턴을 사용한다. 객체가 서비스에 한 번 연결되면 모든 Observer
가 LiveData 객체를 볼 수 있다.
Databinding
개요
Databinding
은 선언형으로 레이아웃의 UI 구성요소를 앱의 데이터와 결합할 수 있도록 지원하는 라이브러리이다. 데이터를 xml 파일에서 처리할 수 있으므로 편리하다.
Databinding 미사용 시
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
Databinding 사용 시
<TextView
android:text="@{viewmodel.userName}" />
장점
1. 코드가 단순해짐
UI 호출 작업을 삭제할 수 있어 파일이 단순화되고 유지관리도 쉬워진다.
2. 메모리 누수 방지
앱 성능이 향상되고 메모리 누수와 NullPointerException을 방지할 수 있다.
Room
개요
Room
은 안드로이드의 내부 데이터베이스인 SQLite를 쉽고 편리하게 사용할 수 있도록 지원한다. 관련 데이터를 캐싱하여 사용자가 오프라인 상태일 때에도 데이터에 접근할 수 있다. 이후 다시 온라인 상태가 되면 변경사항을 자동으로 동기화한다.
구성요소
Database
데이터베이스 홀더를 포함하고 데이터에 연결하기 위한 역할을 한다.
Entity
데이터베이스 내의 테이블이다.
DAO(Data Access Object)
데이터베이스에 접근할 때 사용되는 메소드를 포함한다.
애플리케이션은 Room
데이터베이스를 사용해 DAO
를 가져온다. 이후 각 DAO를 사용해 데이터베이스에서 Entity
를 가져오고 변경사항을 다시 데이터베이스에 저장한다.
ViewModel
개요
ViewModel
은 LifeCycle을 고려하여 UI 관련 데이터를 저장하고 관리할 수 있도록 설계되었다. UI를 관리하는 UI Controller
에 과도한 역할을 부여하면 과부하가 올 수 있고 테스트 또한 어려워진다. 따라서 UI 관리 시 View Data 소유권을 분리하는 방법이 더 쉽고 효율적이라는 점을 이용한 것이 ViewModel이다.
ViewModelProvider
가 ViewModel
에 LifeCycle을 전달하며 ViewModel은 LifeCycle이 끝날 때 까지 메모리에 남아있다.
REFERENCE
Android 아키텍처 구성요소