상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - LiveData의 데이터 결합을 위한 변환 사용법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
<a href='https://sangseek.com/sangseeks/LiveData/ko'>LiveData</a>의 데이터 결합을 위해서는 주로 `MediatorLiveData`와 `Transformations` 클래스를 사용합니다. 각각의 사용법과 특징을 자세히 설명드리겠습니다. 1. Transformations을 이용한 LiveData 변환 및 결합 안드로이드 아키텍처 컴포넌트에서 제공하는 `Transformations` 클래스는 주로 두 가지 변환 함수를 제공합니다. - `map()`: 입력 LiveData가 변경될 때마다 변환 함수를 적용해 다른 타입의 LiveData로 변환 - `switchMap()`: 입력 LiveData가 변경될 때마다 새로운 LiveData를 생성하여 구독하고, 내부 LiveData의 값을 동적으로 반영 사용 예시 ```kotlin val liveData1: LiveData<Int> = ... val liveData2: LiveData<String> = ... // map을 이용해 liveData1의 값을 변환 val mappedLiveData: LiveData<String> = Transformations.map(liveData1) { number -> "Number is $number" } // switchMap을 이용해 liveData1의 값에 따라 liveData2를 동적으로 구독 val switchedLiveData: LiveData<String> = Transformations.switchMap(liveData1) { number -> // 예를 들어, 어떤 조건에 따라 새로운 LiveData를 반환 someFunctionReturningLiveData(number) } ``` 하지만 `Transformations`는 단일 LiveData를 변환하는데 유리하며, 여러 LiveData를 결합하여 하나의 LiveData로 만들고 싶을 때는 부적합할 수 있습니다. --- 2. MediatorLiveData를 이용한 복수 LiveData 결합 `MediatorLiveData`는 여러 개의 LiveData를 관찰해서, 하나 이상의 LiveData에 변화가 발생했을 때 이를 감지하고 자체 값(value)을 변경할 수 있는 MutableLiveData의 하위 클래스입니다. 즉, 서로 다른 여러 LiveData를 조합하여 새로운 LiveData를 만들 때 주로 사용합니다. 사용법 1. `MediatorLiveData` 객체 생성 2. `addSource(sourceLiveData)` 메서드로 관찰할 라이브데이터를 추가 3. 각 라이브데이터의 변경 <a href='https://sangseek.com/sangseeks/콜백/ko'>콜백</a> 내부에서 새로운 값을 계산하거나 조합해 `MediatorLiveData`의 값을 갱신 예시 ```kotlin val liveData1: LiveData<Int> = ... val liveData2: LiveData<String> = ... val mediator = MediatorLiveData<String>() var latestInt: Int? = null var latestString: String? = null mediator.addSource(liveData1) { value -> latestInt = value // 두 값이 모두 있다면 새로운 값을 설정 if (latestString != null && latestInt != null) { mediator.value = "Int: $latestInt, String: $latestString" } } mediator.addSource(liveData2) { value -> latestString = value if (latestString != null && latestInt != null) { mediator.value = "Int: $latestInt, String: $latestString" } } ``` 위 코드는 `liveData1`과 `liveData2` 두 개가 모두 업데이트되어야 `mediator` LiveData의 값이 갱신되는 단순한 예입니다. 이렇게 MediatorLiveData를 쓰면 여러 LiveData의 값을 쉽게 결합(combine)할 수 있습니다. --- 3. 결합 시 주의점 및 팁 - 초기값 문제 : 여러 LiveData를 결합할 때 각 LiveData가 비동기적으로 값을 가지므로, 결합 시점에 일부 값이 null일 수 있습니다. 이런 경우 null 체크를 철저히 해야 합니다. - 무한 루프 주의 : MediatorLiveData의 값을 업데이트할 때, 다시 자신이 관찰하는 LiveData에 영향을 주지 않도록 주의해야 합니다. 아니면 무한 호출이 발생할 수 있습니다. - 코틀린 Flow로 대체 가능 : 최근에는 더욱 강력한 반응형 데이터 스트림을 사용하기 위해 LiveData 대신 <a href='https://sangseek.com/sangseeks/Kotlin Flow/ko'>Kotlin Flow</a>를 사용하는 경우도 많습니다. Flow의 `combine` 연산자를 쓰면 여러 Flow를 쉽게 결합할 수 있습니다. --- 요약 - LiveData를 변환할 땐 `Transformations.map` 또는 `switchMap` 사용 - 여러 LiveData를 결합(combine)할 땐 `MediatorLiveData`가 적합 - 각 LiveData의 변경을 감지해 새로운 값을 계산하여 `MediatorLiveData.value`에 할당 - 초기값 null 체크와 무한 루프 방지에 주의 이런 방식으로 LiveData의 데이터를 유연하게 변환하고 결합하여 UI에 더욱 적합한 형태로 만들 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기