pile·
모바일·oliveyoung올리브영 테크블로그·

Android Kotlin StateFlow 도입기

문제안드로이드 LiveData는 Android 플랫폼에 종속적이라 UI가 없는 도메인·데이터 계층에서 쓰기 어렵고, 클린 아키텍처와 모듈화를 진행하는 코드베이스에서는 도메인이 Android에 묶이는 모순이 생긴다.
접근코틀린 네이티브한 StateFlow로 갈아탔다. StateFlow는 현재 값을 항상 가지는 stateful hot stream이라 매 구독 시 재초기화되지 않고, 여러 구독자가 같은 상태를 공유할 수 있다. 설정 화면 리팩토링에서 ViewModel에 `MutableStateFlow<UiState>`를 두고 Activity에서는 `repeatOnLifecycle` + `collectLatest`로 라이프사이클을 지키며 Loading/Success/Error 상태를 한 흐름으로 처리했다.
결과도메인·데이터 계층에서 Android 의존성이 빠지며 모듈화 친화적인 구조가 됐고, UI 상태 표현이 코루틴 흐름 하나로 일관되게 정리됐다. LiveData에서 StateFlow로 옮긴 실전 도입기로 정리됐다.
oliveyoung
올리브영 테크블로그 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 모바일·토스 SLASH토스 SLASH·

    토스의 디바이스 팜 만들기

    토스가 각 팀이 각자 운영하던 작은 디바이스 팜을 하나의 중앙 플랫폼 '네뷸라(Nebula)'로 통합한 과정을 다룬다. Appium 대신 자체 드라이버를 개발해 클릭 13.5배, 텍스트 입력 10배의 성능을 달성했고, Android와 iOS 미러링도 직접 내재화해 실기기 원격 조작과 화면 실시간 공유를 동시에 가능하게 만들었다. 현재 100대를 넘어 수백 대를 향해 24시간 가동 중이다.

    #android#ios#appium+2
  2. 모바일·LY CorporationLY Corporation·

    AI 에이전트를 위한 Android CLI: 대규모 모바일 개발 환경에 적용하기

    LINE Android 팀이 수백 개 Gradle 모듈 규모의 대형 저장소에서 Google의 Android CLI를 AI 에이전트(Claude Code, Codex, Gemini 등)와 함께 운용하며 겪은 토큰 낭비·오작동 문제를 해결한 과정을 다룬다. 얇은 래퍼와 스킬 레이어를 추가해 CLI 출력을 에이전트 친화적으로 정규화하고, Android Studio 연동 기능을 텍스트 검색보다 정확한 시맨틱 심볼 탐색에 활용하는 방법을 소개한다.

    #android#claude-code#mcp+2
  3. 모바일·토스 SLASH토스 SLASH·

    디자이너가 시안 대신 앱을 만든 이유

    토스 UX 디자이너가 AI를 협력자로 삼아 피그마 시안 대신 실제 SwiftUI 코드로 iOS 앱을 직접 구현한 경험을 다룬다. "데드엔드" 화면(송금·결제 완료 등)을 다음 경험의 시작점으로 전환하는 underlay 컴포넌트를 설계하면서 Metal 셰이더 구현까지 디자이너가 주도했고, 완성된 코드를 개발팀에 전달해 협업 방식 자체를 바꿨다.

    #design-system#ai-coding#ios+2