MVVM AAC LiveData 사용법(1.개념편)
해당 문서는 안드로이드 공식 문서를 기반으로 만들어졌습니다.
공식문서: https://developer.android.com/topic/libraries/architecture/livedata?hl=ko
Jetpack AAC(Android Architecture Components 이하 AAC)를 이용하기 위해서는 기본 안드로이드 개발지식이 필요합니다. 때문에 안드로이드에 대한 기본 지식이 있다는 가정하에 포스팅을 진행하도록 하겠습니다.
LiveData는 rxjava와 매우 유사하며 rxjava를 이용하신 분들이라면 쉽게 접근이 가능할 것 같습니다.
LiveData는 식별 가능한 데이터 홀더 클래스입니다. 일반 식별가능한 클래스와 달리 LiveData는 Activity, Fragment의 생명 주기를 인식하며, 생명주기가 활성화 되어있는 상태에서만 Observer를 업데이트 합니다. 또한 생명주기가 종료되면 자동으로 메모리를 반환합니다.
라이브러리를 사용하기전에 최소 호환버전을 확인하는것은 매우 중요한 작업이며 습관화하는게 좋습니다. 공식문서에는 나와있지는 않지만 구글 샘플코드를 살펴본 결과 14버전 이상이면 사용이 가능할 것으로 보입니다.
최종적으로는 텍스트를 입력하고, 그 변화를 감지하여 리스트를 뿌려주는 앱을 만들도록 하겠습니다.
1. 안드로이드 개발의 시작! Setting
모듈 레벨의 gradle파일에 해당 라이브러리를 추가한 후 gradle.properties에 androidx를 사용하기 위한 작업을 해줍니다.
그리고 프로잭트생성시 자동으로 생성된 MainActivity의 상속클래스를 변경시켜 줍니다.
기존에 android.support.v7.app.AppCompatActivity를 이용하면 생명주기를 공유할 수 없습니다.
생명주기를 공유하기 위해서는 Activity또는 Fragment가 LifecycleOwner의 구현체 이여야 하기 때문입니다.
상속관계는 아래와 같습니다.
MainActivity
ㄴAppCompatActivity
ㄴFragmentActivity
ㄴComponentActivity
ㄴLifecycleOwner
레이아웃도 androidx에 맞게 변경해 줍니다.
모듈수준의 gradle파일에 라이브러리를 추가합니다.
이에맞게 xml레이아웃도 변경시켜줍니다.
이로써 라이브데이터를 이용할 준비가 끝났습니다.
2. LiveData 장단점
구글에서 주장하는 장점은 이렇습니다.
- UI와 데이터 상태의 일치 보장
LiveData는 Observer 객체를 이용하여 데이터의 변화를 관찰하며 UI를 업데이트 할 수 있습니다. - 메모리 누출 없음
LiveData는 Activity와 Fragment의 생명주기를 공유하기때문에 해당 객체의 생명주기가 끝나면 자동으로 메모리를 반환합니다. rx계열 라이브러리와 가장 큰 차이라고 할 수 있겠습니다. - 생명주기를 수동 처리 하지 않음
상기 이유와 같습니다. 물론 수동으로 처리 할 수도 있습니다. 권장하지는 않지만요. - 최신 데이터 유지
생명주기가 pause->resume으로 돌아오면 LiveData는 Observer 객체를 이용하여 데이터를 한번 더 받아옵니다. - 리소스 공유
단일 패턴을 사용하는 LiveData객체를 확장하여 시스템 서비스를 앱에서 공유하도록 래핑할 수 있습니다. LiveData 개체가 시스템 서비스에 연결되고 나면, 리소스를 팔요로 하는 모든 Observer는 LiveData 개체를 관찰 할 수 있습니다. 방법은 추후 샘플코드에 표현하도록 하겠습니다.
제가 느낀 단점은 이렇습니다.
- LiveData를 활용하기 위해서는 반 강제적으로 MVVM모델을 채택해야 하는 경우가 많습니다. 이 때문에 높은 러닝커브가 있습니다.
- Observer패턴을 이용하는 코드 같은 경우 코드 해석이 어려울 수 있습니다.
- LiveData를 잘못 이용할경우 같은 데이터가 여러번 observe되는 기이한 현상을 겪을수 있으며 디버깅하기가 상당히 까다롭습니다.
결론적으로 데이터를 동적으로 처리하기 유리하지만 유지보수 난이도가 높아집니다. 물론 실력이 좋으신분들이야 상관없겠지만 저는 어렵더라구요.
마무리
이후 활용편에서는 MVVM패턴을 이용하여 샘플예제를 작성할 예정입니다.
사용되는 AAC는 LiveData, Room, ViewModel만 사용하여 간략하게 작성할 예정입니다.
전체 소스코드는 깃허브에 올려두도록 하겠습니다.
https://github.com/gus0000123/LiveDataSample
branch : LiveData 사용법(1.개념편)
이상 안드로이드 개발자 이종현이었습니다.
재밌게 읽으셨다면 👏🏻눌러 주시는 것도 잊지말아주세요~ 저에게 큰 힘이됩니다. :)
읽어주셔서 감사합니다~