inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

128

김창완

작성한 질문수 4

0

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

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

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

 

android kotlin jetpack

답변 3

0

김창완

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

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

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

0

오준석

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

0

오준석

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

1

김창완

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

0

오준석

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

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

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

0

김창완

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

 

0

인프런 AI 인턴

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

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

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

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

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

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

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

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

ViewModel 사용 관련 질문

0

75

1

onTabFavorite 콜백 관련 질문

0

60

2

깃허브에 있는 MemoryTodoRepository 는 룸을 사용하는게 아닌 메모리에 저장, 수정, 삭제 하는건가요?

0

172

1

이젠 아래와 같은 오류가 뜨는데 KSP가 문제 인걸까요?

0

369

2

영상 1분쯤에서 MainActivity에서 viewModel이 저는 안되고 그래들 문제인거 같은데 해결 방법을 모르겠습니다.

0

186

1

전자액자에서 영상과 깃허브의 내용이 달라서 영상을 다보고 깃허브 내용으로 돌려봤는데 권한요청부터가 안됩니다.

0

188

2

Navigation수업에서 string대신 bitmap을 인자로 넘겨주는 방법?

0

177

1

TodoList - 04에서 recentlyDeleteTodo가 null일 경우 처리 방법 문의

0

171

1

나만의 웹 브라우저 03 - UI와 ViewModel 연동 강의에서 질문들이 있습니다.

0

205

2

Scaffold를 사용하면 Content padding parameter it is not used 에러

0

349

1

Material3로 바뀌면서 강의랑 다른 부분이 초반부터 있는데요.

0

221

1

강의에서 사용하는 리소스(이미지 등)을 다운 받을 수 있으면 좋겠어요.

0

247

2

Card Compose에서 elevation 옵션

1

347

1

구글맵 질문입니다

0

233

1

구글맵강의중에서 ..

0

578

7

drawCircle( color = Color.... 부분에서 빨간줄이 ...

0

269

2

val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요

0

524

1

나만의 웹브라우져 02 코드실행시 에뮬레이터에 따라

0

221

1

나만의 웹브라우져 01 코딩 후 실행하면 아래와 같은 오류가 뜨네요

0

3220

2

비만도계산기 로직작성 에서 문제가 발생했어요 ^^

0

338

3

viewModel() 오류 추가질문입니다

0

1118

2

viewModel: MainViewModel = viewModel() 에 오류있습니다

0

537

3

AAR metadata 관련오류발생

0

1436

3

모바일화면에 키보드가 사라지지 않아

0

250

1