반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 파이썬
- 프로그래밍언어
- 컴퓨터비전
- 클라우드컴퓨팅
- 네트워크
- 자바스크립트
- 버전관리
- 데이터분석
- 보안
- 데이터구조
- springboot
- 알고리즘
- 웹개발
- 자료구조
- 디자인패턴
- 사이버보안
- I'm Sorry
- 빅데이터
- 인공지능
- 소프트웨어
- 컴퓨터공학
- 데이터베이스
- 컴퓨터과학
- 소프트웨어공학
- 머신러닝
- 프로그래밍
- 딥러닝
- 데이터과학
- Yes
- 네트워크보안
Archives
- Today
- Total
스택큐힙리스트
MediatorLiveData 제대로 쓰는 7가지 실전 팁 본문
반응형
안드로이드 MVVM에서 MediatorLiveData 는 “여러 스트림을 하나로 묶는 허브”입니다. 소스 LiveData 들을 자유롭게 합치고, UI-State를 한곳에서 관리할 수 있죠. 그러나 잘못 쓰면 메모리 누수나 스파게티 ViewModel 로직을 만들기도 합니다. 여기, 실제 서비스 코드와 조회수 높은 한국 개발 블로그들을 참고해 뽑은 핵심 활용 팁 7가지를 정리했습니다.
- addSource / removeSource는 ViewModel 안에만 두자
MediatorLiveData 는 내부적으로 addSource() 로 등록된 스트림을 관찰하고 removeSource() 로 해제합니다. 이 로직은 ViewModel 레이어에서 끝내야 UI 컨트롤러(액티비티·프래그먼트)가 가벼워집니다. - 버튼 활성화·폼 검증 등에 ‘다중 LiveData 합성’ 활용
예를 들어 이메일·비밀번호 LiveData 둘을 합쳐 회원가입 버튼의 enable 상태를 계산할 수 있습니다. 땅으니 블로그 예시처럼 네다섯 개의 스트림도 거뜬히 한 줄에 합칠 수 있어요. - 확장 함수로 보일러플레이트 줄이기
“소스 추가 → 값 포워딩” 코드를 매번 쓰기 귀찮다면, 확장 함수로 래핑해 두세요. Medium 글의 샘플처럼 MediatorLiveData<T>.combine(...) 식으로 만들면 훨씬 읽기 좋습니다. - Kotlin Flow + asLiveData() 조합을 고려
네트워크·Room 등 코루틴 기반 스트림이라면 먼저 Flow 로 결합하고, 최종 단계에서 asLiveData() 로 변환하면 로직 분리가 더 깔끔합니다. - distinctUntilChanged()로 불필요한 UI 리렌더 막기
여러 소스를 합치다 보면 값이 동일해도 매번 옵저버가 호출되는 경우가 많습니다. switchMap · map 뒤에 distinctUntilChanged() 를 붙이면 불필요한 UI 업데이트를 방지할 수 있어요. - onActive() / onInactive() 훅으로 리소스 관리
MediatorLiveData 자체가 활성화될 때만 내부 소스를 붙이고, 비활성화되면 떼도록 구현해 두면(예: API 폴링 중지) 배터리와 데이터 사용량을 아낄 수 있습니다. - 소스 제거를 잊지 말자—메모리 누수 방지
일회성 결제 · 로그인 Flow 등 일시적인 로직이라면 작업이 끝난 즉시 removeSource() 나 value = null 처리로 참조를 끊어 주세요. 안 그러면 ViewModel이 살아 있는 한 콜백이 계속 쌓여서 메모리와 CPU를 잡아먹습니다.
마무리
MediatorLiveData 는 “작은 중재자(Mediator)” 같은 존재입니다. 스트림 수가 늘어도 UI 코드는 단순해지고, 테스트 대상도 ViewModel 한곳으로 모일 수 있죠. 위 7가지만 지키면 과도한 콜백 지옥이나 누수 걱정 없이 클린한 데이터 파이프라인을 구축할 수 있습니다.
반응형
'개발' 카테고리의 다른 글
이어보기 완성! Iterator + Memento로 구현한 플레이백 히스토리 (1) | 2025.07.30 |
---|---|
Memento 패턴: “되돌리기(Undo)”를 코드로 구현하는 가장 깔끔한 방법 (0) | 2025.07.30 |
Kotlin also 한눈에 이해하기 (1) | 2025.07.29 |
Mediator 패턴: 복잡한 객체 의존을 한 방에 정리하기 (2) | 2025.07.29 |
Kotlin Sequence 내부 구현으로 배우는 Lazy Iterator 원리 (1) | 2025.07.29 |
Comments