Github 에서 많은 코드들, 더 좋은 코드를 작성하기 위한 고민을 하다보면 LiveData 가 등장하게 됩니다.
1. LiveData 란 무엇일까요?
일단, LiveData 는 Android Jetpack 의 Component 입니다.
* Android Jetpack : Jetpack은 개발자가 관심 있는 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 제거, 모든 Android 버전과 기기에서 일관되게 작동하는 코드 작성을 돕는 라이브러리 모음입니다.
오늘은 문서를 따라가면서 정리를 먼저 해보겠습니다. ( 영어고수가 아닌 저는 번역본과 원문을 같이 봐야합니다.. )
ps. 저처럼 영어에 약하신 분들은, 번역본만 보시지 마시고, 꼭 원문과 같이보세요! ( 자칫 잘못하면 이해를 방해합니다. )
LiveData is an observable data holder class. LiveData는 관측 가능한 데이터 홀더 클래스입니다.
Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services. 일반 관측 가능과 달리 LiveData는 수명주기 인식 기능을 갖추고 있습니다. 따라서 Activity, Fragment 또는 services와 같은 다른 앱 구성요소의 수명주기를 고려합니다.
This awareness ensures LiveData only updates app component observers that are in an active lifecycle state. 수명주기 인식을 통해 LiveData는 활동상태에 있는 앱 구성 요소 관찰자만 업데이트할 수 있습니다. |
구구절절하게 써놨지만, 정리하자면...
LiveData 는 Activity,Fragment, Services 과 같은 LifeCycle 가 고려되어 동작한다.
- STARTED, RESUMED : LiveData 활동상태 , Observer 객체 업데이트 가능
- 그 외 : LiveData 비활동상태, Observer 객체 업데이트 불가능
- DESTROYED : LiveData Observer 제거 가능
라고 볼 수 있을 것 같습니다.
2. LiveData 를 사용했을 때 장점은 무엇일까요?
1. UI 와 데이터 상태의 일치를 보장할 수 있습니다. ( Ensures your UI matches your data state )
LiveData 는 Observer Pattern을 따릅니다. 즉, LiveData 의 데이터가 변경될 때 마다 Observer 객체에게 알려줍니다. Observer 객체에서는 LiveData의 데이터가 변경될 때 마다 UI 를 Update 하는 로직을 작성해둔다면 UI 와 데이터 상태의 일치를 보장할 수 있어집니다. |
2. 메모리 누수가 없습니다. ( No memory leaks )
메모리에 올라가있는 인스턴스를 앱이 더이상 필요하지 않음에도 GC 의 대상이 되지 못하면, 메모리누수가 발생합니다. LiveData 는 수명주기가 끝나면 자동으로 삭제됩니다. 즉, 메모리누수를 방지할 수 있습니다. |
3. 중지된 액티비티로 인한 비정한 종료가 없습니다. ( No crashes due to stopped activities )
LiveData 를 관찰하고있는 Activity, Fragment, Services 등의 중지된 상태에서는 LiveData 의 변경사항에 대해 수신하지 않습니다. 따라서, LiveData 가 변경되었을 때 UI 를 수정하는 코드를 작성했다고 해도 동작하지 않으면서 비정상 종료에서 벗어날 수 있습니다. |
4. 수동으로 수명 주기를 처리하지 않습니다.( No more manual lifecycle handling )
UI 를 구성하는 Component 들은 LiveData 를 관찰하기만 할뿐, 그 관찰을 중지하거나, 다시시작하는 행위를 하지 않습니다. 관찰하는 동안 LifeCycle 상태의 변경을 인식하기 때문에 이러한 사항들은 자동으로 관리합니다. |
5. 항상 최신 데이터 유지합니다. ( Always up to date data )
만약 Oberver 객체가 백그라운드 상태가 되었을 때, 포그라운드 상태로 돌아오면, 그 즉시 LiveData 의 최신 데이터를 수신합니다. 따라서, 백그라운드 상태에 있을 때 데이터가 업데이트 되더라도, 포그라운드로 돌아오면 항상 최신 데이터를 유지합니다. |
6. 구성(configuration)이 변경되었을 때, 적절하게 반응합니다. ( Proper configuration changes )
기기가 회전과 같은 구성(configuration) 의 변경으로 인한 Activity, Fragment 재생성등의 상황이 발생하면 사용가능한 LiveData 의 최신 데이터를 수신합니다. 따라서, 흔히 화면 회전시 사용해야 하는 Data 가 유실되는 경우를 쉽게 방지할 수 있어집니다. |
7. 리소스를 공유합니다. ( Sharing resources )
LiveData 가 Observer 객체의 LifeCycle 을 인식할 수 있다는 것은, Activity, Fragment, Services 간에 객체를 공유할 수 있다는 것입니다. LiveData 를 상속받아서 새로운 LiveData 클래스를 만들고, 싱글톤 패턴을 사용하여 구현할 수 있습니다. <상세링크> |
3. 오늘의 결론
LiveData 를 단순히 예제가 그러니까, 많은 코드들에서 쓰이고 있어서, 라는 이유로 사용하기 보다는
LiveData 의 장점들을 한번 더 기억하고, 그러한 장점을 살리는 코드를 작성해보는건 어떨까요?
'BackUp (관리중지) > Android 이론' 카테고리의 다른 글
Android Service (0) | 2021.05.14 |
---|---|
Android Coroutine [코루틴] (0) | 2021.05.04 |
Fragment 와 Fragment LifeCycle 분석 (0) | 2021.04.19 |
Activity 와 Activity LifeCycle 분석 (0) | 2021.04.15 |
Android Context 에 대한 분석 (1) | 2021.04.14 |