인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김창완님의 프로필 이미지

작성한 질문수

모던 안드로이드 - Jetpack Compose 입문

livedata가 왜 필요한 건지 궁금합니다

작성

·

17

0

retrofit 관련 학습 중인데요. livedata/mutablelivedata 가 나오는데 viewmodel과 무슨 차이가 있는지 궁금해서 여쭤 봅니다.

viewmodel은 변수를 쉽게 지정해서 사용하는 클래스 정도로 이해하고 있는데, livedata는 왜 필요한 건지를 잘 모르겠어서요

livedata는 수명주기를 인식한다는 말과 관찰 가능하다는 말이 무슨 말인지요?

 

답변 3

0

김창완님의 프로필 이미지
김창완
질문자

만약 도시명을 입력받고 검색을 누르면

뷰모델에서 레트로핏 api로 데이터를 받아오고 그 결과를 보여주는 앱을 디자인한다고 가정 했을 때,

제가 제대로 이해했다면, 도시명을 입력 받는 변수는 뷰모델로 처리하고, 그에 따른 변동된 검색결과를 보여주는 변수는 관찰가능한 라이브데이터로 처리하면 될 것 같군요.

오준석님의 프로필 이미지
오준석
지식공유자

정확하게 이해하셨습니다.

오준석님의 프로필 이미지
오준석
지식공유자

참고로 요즘에는 자바는 LiveData를 사용하고 코틀린이라면 Flow 를 사용하는 추세입니다. 참고하세요.

김창완님의 프로필 이미지
김창완
질문자

flow랑 비교도 궁금했었는데 감사드립니다. 덕분에 하나하나 알아나가는 것이 느껴집니다.

0

오준석님의 프로필 이미지
오준석
지식공유자

LiveData 가 관찰 가능하다는 뜻은 LiveData 에 넣어 둔 데이터가 변경되었을 때 뷰단에서 콜백으로 알림이 오게 된다는 뜻입니다.

그래서 명시적으로 화면 업데이트 하는 코드를 여러군데 쓸 필요가 없습니다.

그리고 Activity나 Fragment의 생명주기에 따라서 화면이 보일때는 LiveData 의 값을 관찰하고, 화면이 안 보일 때는 관찰을 중지하기 때문에 수명주기를 인식한다고 표현합니다.

김창완님의 프로필 이미지
김창완
질문자

네~ 그런 뜻이군요. 빠른 답변 감사드립니다

 

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김창완님.

ViewModel과 LiveData에 대해 궁금한 점을 가지고 계신 것 같네요!

ViewModel은 UI 관련 데이터를 저장하고 관리하기 위해 사용됩니다. 보통 액티비티나 프래그먼트가 파괴되었다가 다시 생성될 때 데이터를 유지하기 위해 활용됩니다.

한편, LiveData는 관찰 가능한 데이터 홀더 클래스로서, 데이터가 변경되면 이를 관찰하고 있는 모든 컴포넌트가 자동으로 업데이트되는 특징이 있습니다. LiveData는 Android의 수명 주기 인식 구성 요소, 즉 액티비티와 프래그먼트의 수명 주기를 고려하여, 수명 주기 소유자의 상태가 STARTED 또는 RESUMED일 때만 옵저버가 알림을 받을 수 있습니다.

간단히 말해:
- ViewModel은 데이터를 직접 보유하며, 시스템에 의해 파괴/재생성되는 경우에도 데이터를 유지할 수 있도록 도와줍니다.
- LiveData는 무언가를 ‘보고’ 있는 역할을 하며, 데이터의 변화가 발생할 때 자동으로 알려주는 역할을 합니다.

보다 구체적인 설명과 관련된 예제는 다음 질문들을 참고하시면 도움이 될 것입니다:

  1. 라이브 데이터 + 데이터 바인딩 질문드립니다! - LiveData와 데이터 바인딩의 상호 작용을 탐구합니다.
  2. Kotlin DataBinding - LiveData와 데이터 바인딩 활용의 다른 측면들에 대해서 알아봅니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.