안드로이드 학습(Compose)/Compose로 날씨 앱 재구성하기

Jetpack Compose로 앱을 재구성하기위한 검토 단계

리저브콜드브루 2025. 3. 7. 10:15
728x90
반응형
 

1. 간단한 날씨 앱 개발을 위한 설계 - Main Home

안드로이드 기능과 기술 스택 정리 언어: KotlinIDE: Android StudioMain Home위치 기반 서비스와 기상청 API를 이용해 현재 위치의 날씨 정보를 표시한다. 1. UI 구성 (예상)기능UI 요소 (예상)추가 요소현

joyshu93.tistory.com

 

Compose 실습을 위해 간단히 진행했던 날씨 앱을 활용

 

UI 구성

  • activity_main.xml, activity_search.xml, item_city_card.xml  XML은 불필요 
  • Compose 함수 기반으로 UI 구성
  • ConstraintLayout, LinearLayout, RelativeLayout >> Column, Row, Box
  • XML에 정의된 layout_width, layout_height, margin, padding, wrap_content, match_parent >> modifier 활용
  • RecyclerView + Adapter  >> LazyColumn 또는 LazyRow로 변경
  • findViewById() 필요 없음

 

ViewModel 및 데이터 흐름

  • LiveData, MutableLiveData >> StateFlow, MutableState로 변환
  • observe() 대신 collectAsState()로 UI 데이터 변경
  • viewModelScope.launch 내부에 데이터를 갱신하고 Compose에서 collectAsState()를 통해 UI에 자동 반영
  • collectAsState()는 LaunchedEffect() 또는 produceState()와 함께 사용하여 최적의 성능 유지

위치 권한 및 데이터 저장

  • LocationProvider.kt에서 FusedLocationProviderClient 활용 중 >> Compose에선 rememberLauncherForActivityResult 사용
  • Activity onStart에서 위치를 가져오는게 아니라 LaunchedEffect를 사용해 UI가 로드될 때 한번만 실행
  • DataStore 값을 collectAsState로 UI에 반영

 

Retrofit, API 연동 방식 변경 (데이터 로딩 방식 최적화)

  • API 요청을 LaunchedEffect 또는 produceState로 처리, 화면이 처음 생성될 때 자동으로 호출
  • LiveData.observe 대신 collectAsState로 상태 관리
  • 네트워크 로딩 상태 표시 추가

 

지도 연동

  • XML에서 MapView 포함하여 표시 >> AndroidView를 활용해 MapVIew를 감싸는 형식

 

요약

기능 기존 방식 Jetpack Compose 방식
UI 레이아웃 XML (activity_main.xml, activity_search.xml) @Composable 함수로 UI 정의
리스트 UI RecyclerView + Adapter LazyColumn() 및 LazyRow()
ViewModel 데이터 관리 LiveData.observe() StateFlow.collectAsState()
위치 권한 요청 ActivityCompat.requestPermissions() rememberLauncherForActivityResult()
데이터 저장 (DataStore) locationDataStore.cur_latitude.first() collectAsState()로 변경 감지
API 연동 viewModelScope.launch {} LaunchedEffect() 또는 produceState() 활용
지도 연동 (Kakao Map) MapView XML에 포함 AndroidView { MapView(context) }

 

 

 

Jetpack Compose 변환 시 기대 효과

  • 코드가 간결해짐: XML과 Activity를 따로 관리할 필요 없이 UI가 Composable 함수로 정리됨
  • 성능 최적화: RecyclerView보다 LazyColumn, LazyRow가 더 효율적으로 작동
  • 더 쉬운 상태 관리: LiveData 대신 State를 활용해 더 직관적으로 데이터 변경 감지
  • UI 미리 보기 가능:  @Preview 기능으로 실시간 UI 확인 가능

검토 항목 및 예상 소요 시간

검토 항목 예상 소요 시간
UI 재구성 (Compose 변환) 2~3일
ViewModel 및 상태 관리(StateFlow) 적용 1~2일
위치 권한 요청 및 위치 데이터 연동 1~2일
API 연동 최적화 (Retrofit + Compose 연동 개선) 1~2일
Kakao Map 연동 최적화 2~3일
  • 1주~2주 소요 예상
728x90
반응형