상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - LiveData의 기본 패턴 및 사용 팁은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
LiveData는 안드로이드 아키텍처 컴포넌트 중 하나로, 데이터의 변화를 관찰 가능하게 하여 UI와 데이터 간의 연결을 안전하고 효율적으로 관리할 수 있게 해줍니다. LiveData를 활용하는 <a href='https://sangseek.com/sangseeks/기본 패턴/ko'>기본 패턴</a>과 사용 팁을 상세히 설명하겠습니다. 1. LiveData <a href='https://sangseek.com/sangseeks/기본 개념/ko'>기본 개념</a>과 역할 - 관찰 가능 데이터 홀더 : LiveData는 데이터 상태를 보유하며, 데이터가 변경될 때 등록된 옵저버(주로 Activity나 Fragment)에 자동으로 알립니다. - 생명주기 인식 : LiveData는 Lifecycle을 인식하기 때문에, UI가 표시되는 상태(STARTED, RESUMED)일 경우에만 옵저버에 알림을 전달해 메모리 누수나 크래시를 방지합니다. 2. 기본 사용 패턴 - ViewModel에 LiveData 선언 ViewModel 안에서 데이터를 `MutableLiveData<T>` 로 선언하고, UI에는 불변 타입인 `LiveData<T>` 를 제공하는 것이 권장됩니다. 이렇게 하면 ViewModel 외부에서 데이터 변경을 방지할 수 있습니다. ```kotlin class MyViewModel : ViewModel() { private val _data = MutableLiveData<String>() val data: LiveData<String> get() = _data fun updateData(newData: String) { _data.value = newData } } ``` - UI 레이어에서 옵저버 등록 Activity나 Fragment에서 ViewModel의 LiveData를 관찰합니다. LifecycleOwner로 자신을 넘겨 주어 생명주기 안전성을 확보합니다. ```kotlin myViewModel.data.observe(this, Observer { value -> // UI 업데이트 textView.text = value }) ``` - 데이터 변경은 ViewModel 내부에서만 수행 UI에서는 데이터를 직접 수정하지 않고 ViewModel에 요청하여 데이터를 변경하도록 합니다. 이런 방식이 단방향 데이터 흐름(One-way data flow)을 지원해 상태 관리를 체계적으로 만듭니다. 3. 중요 사용 팁 및 고려사항 - MutableLiveData와 LiveData 분리 위에서 설명한 대로, 내부 변경은 MutableLiveData로 하되 외부엔 LiveData만 노출하여 데이터 무결성 유지. - UI 상태나 이벤트 처리 LiveData는 UI 상태 데이터에 적합하나, 이벤트 처리(예: 일회성 팝업 메시지)에는 적합하지 않을 수 있습니다. 이러한 경우 <a href='https://sangseek.com/sangseeks/SingleLiveEvent/ko'>SingleLiveEvent</a>, EventWrapper 같은 별도 패턴이나 StateFlow 사용을 고려하세요. - 값 변경 시점 주의 `value = newValue` 는 메인 스레드에서만 가능하고, 백그라운드 스레드에서 변경하려면 `postValue()` 를 사용해야 합니다. - MutableLiveData 초기값 설정 데이터를 처음부터 가지고 있다면 초기값을 설정하는 것이 옵저버가 등록되는 시점에 누락 없이 데이터를 받을 수 있어 좋습니다. - 사용자 정의 옵저버 변경된 데이터 값에 따른 부가 작업을 수행하고 싶다면, `Transformations.map`이나 `switchMap` 기능을 활용하거나, 새로운 MediatorLiveData를 만들어 관찰할 수도 있습니다. - 메모리 누수 방지 LiveData는 LifecycleOwner에 자동으로 옵저버 해제를 하지만, LifecycleOwner가 없는 일반 객체에서 사용할 경우엔 removeObserver를 적절히 호출해줘야 합니다. - 복잡한 상태 관리 시 다른 도구 병행 LiveData가 간단한 데이터 흐름에는 매우 유용하지만, 복잡한 <a href='https://sangseek.com/sangseeks/상태 전환/ko'>상태 전환</a>이나 이벤트 처리는 StateFlow, RxJava 등의 리액티브 툴과 함께 쓰는 것이 좋습니다. 4. 요약 - ViewModel 내부에 `MutableLiveData` 선언, 외부엔 `LiveData` 제공 - UI에서 LiveData를 `observe()`해 변경 사항에 반응 - 데이터 변경은 ViewModel 내에서만 수행해 캡슐화 유지 - 수정/이벤트 패턴에 따라 적절한 LiveData 활용법(예: SingleLiveEvent) - 메인 스레드 외에서 변경 시 `postValue()` 사용 - LifecycleOwner를 적절히 활용해 메모리 누수 방지 - 필요 시 Transformations 사용으로 데이터 가공 및 조합 이 기본 패턴과 요령을 따르면 LiveData를 통한 데이터 바인딩과 UI 업데이트가 부드럽고 안전하게 이루어질 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기