분류 전체보기

    [Compose Resource Legacy] 1. colorResource, getColor 사용해 color.xml파일에서 Color객체 만들기 : Compose의 xml파일에서 color을 로딩하는 방법

    color.xml과 Color객체 color.xml은 Jetpack Compose가 출시되기 이전 color을 정의하는 방법이었다. 하지만, Compose에서 Color객체와 Color객체를 이용한 Theming을 지원하게 되면서 코드 상에 Color 객체를 정의하는 방식이 표준이 되어, 기존 color.xml을 이용한 색상 리소스 로딩 방법을 더이상 사용하지 않게 되었다. 하지만 기존의 프로젝트들에서 모든 리소스를 한 번에 이동하기는 번거롭다. 따라서 Compose에서는 colorResource메서드와 color.xml을 이용한 Color객체 로딩 방법 또한 제공한다. 새로운 앱에서는 color.xml을 사용하지 말고 Color 객체를 사용하도록 하자. 기존 color.xml의 color를 로딩하기 위..

    [Coroutine Flow] 3. stateIn 사용하여 Flow를 StateFlow로 변환하기

    Flow와 StateFlow 우리는 리액티브 프로그래밍을 할 때 여러 데이터 흐름(flow)를 하나로 합쳐 하나의 데이터 흐름(Flow)으로 만들어낸다. 예를 들어 아래의 그림3에서는 Flow가 3개 있고 이것이 합쳐져 하나의 Flow를 만들어낸다. 이러한 상황은 흔하다. 예를 들어 우리가 영화 평점 앱을 만든다고 할 경우 영화에 대한 정보, 사용자에 대한 정보, 사용자의 영화의 평점에 대한 정보를 각 테이블에서 가져와 하나의 객체로 만들어야 한다. 하나로 만들어진 Flow는 UI에서 사용되기 위해 StateFlow로 변환되어야 한다. 이 UI에서는 이 StateFlow를 구독하여 항상 최신 데이터를 발행받는다. 이것이 가능하기 위해서는 Flow를 StateFlow로 변환하는 로직이 필요하다. 또한 St..

    [Coroutine Flow] 2. Flow와 StateFlow의 차이는 무엇인가?

    Flow의 한계 Flow는 데이터의 흐름이다. Flow는 데이터의 흐름(flow)을 발생시키기만 할 뿐 데이터가 저장되지 않는다. 따라서 flow만을 이용해 안드로이드의 UIState를 업데이트 하기 위해서는 두가지 방법이 가능했다. 화면이 재구성 될때마다 다시 서버 혹은 DB로부터 데이터 가져오기 Flow로부터 collect한 데이터를 ViewModel에 저장해놓고 사용하기 1번 방법은 비효율적이다. 예를 들어 안드로이드에서는 화면이 회전되었을 때마다 onDestroy가 호출된 후 다시 onCreate이 호출되는데, 이때마다 새로운 데이터를 서버 혹은 DB로부터 가져와야 하기 때문이다. 2번 방법은 효율적이다. 아래 그림의 ViewModel이 살아있는 범위에서 볼 수 있듯이 ViewModel은 onDe..

    [Android Compose Resource] 3. Composable에서 stringResource 메서드 이용해 strings.xml에서 문자열 로딩하기 : Compose의 getString은 어떻게 동작하는가?

    strings.xml이란? strings.xml은 문자열 key값에 대한 value값을 매핑해놓은 XML파일이다. XML파일이란 eXtensible Markup Language 의 약자로 다목적 마크업 언어이다. 안드로이드에서는 이 xml파일을 블록 내에 리소스 태그을 만드는 식으로 사용한다. 예를 들어 문자열의 경우 태그를 이용해 정의한다. 예를 들어 아래와 같은 strings.xml 파일이 있다고 해보자. 위 string.xml 파일은 아래 두가지 Key-Value 쌍을 가지고 있다. 하나는 "app_name" - "Compose" 쌍이고, 다른 하나는 "kotlin_world_blog"와 "Kotlin World Blog" 쌍이다. Key Value app_name Compose kotlin_wor..

    [CoroutineScope] 3. repeatOnLifecycle 사용하여 불필요한 메모리 사용 방지하기 : flow의 올바른 데이터 수집 방법

    lifecycleScope의 한계점 flow를 Activity의 lifecycleScope에서 사용하게 되면 Activity가 onDestroy 될 때 데이터 collect가 중단된다. 하지만 onDestroy는 Activity가 종료될 때 수행되고 Activity가 백그라운드로 내려갈 때 수행되지 않는다. 앱이 백그라운드로 내려가면 activity의 lifecycle은 onStop시 수행되므로 lifecycleScope의 collect는 계속해서 데이터를 수집하는 것이다. 참조 : [Android CoroutineScope] 1. Activity, ViewModel에서 올바른 CoroutineScope 사용법 : lifecycleScope과 viewModelScope의 활용 기존의 해결책 기존에는 이 ..