Android Architecture Component(AAC) - 안드로이드 jetpack의 일부로 UI구성요소의 수명주기를 관리하고 데이터 지속성을 처리하기 위한 라이브러리
1. lifecycle - UI 구성요소의 수명주기를 관리해주는 컴포넌트
왜 사용해야할까?
(1) 라이프 사이클(onCreate, onResume등) 메서드에 많은 코드가 저장되어 유지관리가 어려워진다.
(2) Activity가 중지될때 장기실행이 들어있는 콜백코드의 경우 오류가 날 확률이 높다.
lifecycle은 이벤트와 상태값을 보고 수명주기를 추적할 수 있으며
LifecycleOwner는 라이프사이클이 있음을 나타내는 인터페이스로 라이프사이클을 소유하고 있는 옵져버패턴의 서브젝트입니다.
이때 라이프사이클을 소유한다 라는 뜻은 정확하게는 라이프사이클옵져버(LifecycleObserver)를 소유한다는 것이다.
public class SupportActivity extends Activity implements LifecycleOwner
...
}
LifecycleObserver : 생명주기를 관찰하는 옵저버 클래스
생명주기 진입시 로그를 기록한다고 해보면, 기존에는 전부 직접 액티비티에 기술해야 했다. 하지만 지금은 다음과 같은 옵져버를 미리 만들어두면
된다.
class Logger implements LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate(){
Log.i("base", "onCreate");
}
}
이러면 이 옵져버는 오너측의 onCreate를 통보받아 실행되므로 액티비티에서는 다음과 같이 등록하면 된다.
public class MainActivity extends AppCompatActivity{
{
getLifecycle().addObserver(new Logger());
}
@Override
protected void onCreate(Bundle savedInstanceState){
...
}
}
2. Live Data - 관찰가능한 데이터 클래스
라이프사이클을 인식하여 수명주기가 STARTED or RESUME인 경우만 Observer로 표시되는 관찰자를 활성상태로 간주하고 활성관찰자에게만
업데이트를 알린다.
장점 (1) 항상 최신 데이터 (2) UI가 데이터 상태와 일치하는지 확인한다.
3. viewModel - UI 관련 데이터를 보관하고 관리하기 위해 사용되는 클래스로 액티비티가 재생성되는 상황에서도 viewmodel인스턴스를 유지함으로써
데이터를 안전하게 다룰 수 있다. 또한 데이터 소유권을 액티비티나 프래그먼트로부터 분리시킴으로써 관심사 분리 즉 액티비티와 프래그먼트는 UI를
업데이트하는 역할에 집중시킨다는 의미에서 단일책임의 원칙을 따를 수 있는 발판이 된다.
4. room - SQLite 객체 매핑 라이브러리로 유연한 database접근을 가능하게 한다.