상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - LiveData 내에서 생기는 사이드 이펙트 처리 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
LiveData는 안드로이드 아키텍처 컴포넌트 중 하나로, UI와 데이터 소스를 연결해주는 관찰 가능(Observable) 데이터 홀더입니다. LiveData의 중요한 특징 중 하나는 UI의 라이프사이클을 인식하여 적절하게 구독자(Observer)를 관리한다는 점입니다. 그러나 LiveData를 사용할 때 사이드 이펙트(부수 효과)를 어떻게 처리할지 고민할 필요가 있습니다. 사이드 이펙트란? 사이드 이펙트는 어떤 상태나 값을 관찰하는 과정에서 본래 데이터 변경 이외에 추가로 발생하는 작업을 의미합니다. 예를 들어, 네트워크 요청 후 Toast 메시지 표시, 네비게이션, 화면 전환, 알림창 띄우기 등이 사이드 이펙트입니다. LiveData는 본질적으로 데이터의 상태만을 나타내고 전달하는 데 초점이 맞춰져 있어서, 사이드 이펙트를 직접 처리하도록 설계되어 있지 않습니다. 따라서 LiveData 관찰 중 발생할 수 있는 사이드 이펙트를 올바르게 처리하지 않으면, 예를 들어 <a href='https://sangseek.com/sangseeks/화면 회전/ko'>화면 회전</a> 시 UI 이벤트가 중복 발생하는 등 문제가 생길 수 있습니다. LiveData 내 사이드 이펙트 처리 방법 1. 이벤트 래핑 (<a href='https://sangseek.com/sangseeks/Event Wrapper/ko'>Event Wrapper</a>) 사용하기 가장 많이 사용되는 패턴 중 하나는 ‘이벤트 래퍼(Event Wrapper)’를 사용하는 것입니다. 즉, 데이터를 단순히 저장하는 대신 이벤트가 발생했음을 알리고, 해당 이벤트가 한 번만 소비되도록 하는 클래스를 만들어 사용합니다. - `<a href='https://sangseek.com/sangseeks/SingleLiveEvent/ko'>SingleLiveEvent</a>`: 구글 공식 라이브러리는 아니지만 널리 사용되는 커스텀 LiveData로, 이벤트가 한 번만 전달되어 중복 호출을 막아줍니다. - `Event<T>` 클래스: 일반적으로 데이터를 감싸고, 한 번 소비되면 재사용하지 않도록 내부에 소비 상태를 관리합니다. 2. 상태(State)와 이벤트(Event)를 분리하기 UI 상태(예: 화면에 표시할 텍스트, 로딩 상태)와 일회성 이벤트(예: 토스트 메시지, 네비게이션)를 구분하여 별도의 LiveData로 관리합니다. - 상태 변화는 일반 LiveData 또는 StateFlow로 전달 - 이벤트 발생 시에는 위의 이벤트 래퍼를 감싼 LiveData를 이용해서 UI에서 한 번만 처리 3. 다른 아키텍처 컴포넌트 사용하기 - Kotlin Coroutines의 `Channel`이나 `SharedFlow`를 사용하여 일회성 이벤트를 처리한다. LiveData는 상태 유지에 더 적합한 반면, 이벤트 단발성 처리에는 `Channel`이나 `SharedFlow`가 직관적입니다. 이 경우 ViewModel에서 이벤트를 `Channel`로 보내고, Fragment나 Activity에서는 이를 수신해 사이드 이펙트를 처리합니다. 4. Observer에서 신중하게 처리하기 Observer 내부에서 직접 사이드 이펙트를 처리할 때는, UI 재구성(예: 화면 회전)을 고려해 중복 실행을 막도록 조건문 또는 이벤트 중복 체크 로직을 작성해야 합니다. 하지만 이 방법은 번거롭고 에러가 발생하기 쉬우므로 권장되지 않습니다. 요약 - LiveData는 데이터 상태 전달용이며, 사이드 이펙트(일회성 UI 이벤트) 처리를 위해 별도의 이벤트 래퍼 또는 다른 아키텍처 패턴 필요 - 이벤트 래퍼(Event 클래스, SingleLiveEvent)를 만들어 이벤트가 한 번만 처리되도록 보장 - UI 상태와 UI 이벤트를 명확히 분리해서 관리 - Kotlin Coroutines Flow, Channel 등의 더 나은 비동기 이벤트 처리 수단 활용 가능 - 직관적인 사이드 이펙트 처리를 위해 ViewModel에서 이벤트만 발생시키고, UI는 이를 구독해 처리하는 구조 권장 이러한 방식들을 활용하면 LiveData에서 발생하는 사이드 이펙트를 깔끔하고 견고하게 관리할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기