본문 바로가기
반응형

전체 글91

Android - DataStore로 SharedPreferences를 대체하자. 어플리케이션을 개발하다보면 앱 내부에 데이터를 저장해야 할 때가 있다. 그 중에서 어떤 유저가 특정 기능을 활성화 했는지 여부와 같이 굉장히 작은 규모의 데이터가 저장되어야 할 때가 있다. 이럴때 우린 SharedPreferences를 사용해서 저장하곤 했다. 하지만 SharedPreferences는 여러가지 단점이 있다. UI쓰레드에서 호출하기에 안전하지 않고, 예외나 런타임 안정성 등이 있다. 그리고 비동기 API에 대한 대응도 부족한 편이다. 이런 단점 때문인지, 구글에서 이를 보완하기 위해 Jetpack DataStore를 개발하였다. https://developer.android.com/topic/libraries/architecture/datastore?hl=ko 앱 아키텍처: 데이터 영역 -.. 2023. 7. 7.
Android - ProcessLifecycleOwner 로 앱의 Foreground/Background 상태 처리하기 간혹, 앱이 Foreground인지 Background 상태인지에 따라 처리를 해 주어야할 때가 있다. 이를테면 Background에 빠졌을 때 UI와 관련된 작업을 멈춘다던지, 다시 Foreground로 돌아왔을 때 어떤 작업을 활성화해준다던지 등이 있을 수 있다. 이럴때, 특정 Activity/Fragment에서의 처리라면 해당 화면의 Lifecycle의 이벤트를 수신해서 처리할 수 있지만, 화면 레벨이 아닌 앱 레벨에서의 처리가 필요할때도 있다. 이럴때 마다 모든 Activity/Fragment의 이벤트를 수신받아 처리하기엔 과한 부분이 있다. 이를 해결하기 위해 ProcessLifecycleOwner를 사용할 수 있다. https://developer.android.com/reference/and.. 2023. 6. 19.
Android Compose - LazyColumn의 최하단 스크롤 이벤트 감지하기 안드로이드 앱을 개발하면서 스크롤이 있는 레이아웃 요소는 흔하게 사용된다. 예를 들자면 ScrollView, RecyclerView와 같은 것들이다. 스크롤이 있는 레이아웃 요소를 사용할 때 스크롤에 대한 이벤트 처리, 특히 최하단에 도달했는지 여부를 확인해야하는 경우가 종종 있다. 이를테면 데이터가 페이징되어 있을 때다. 스크롤이 최하단에 도달했을 때 API 등을 호출하여 추가적인 데이터를 로드하고 스크롤 레이아웃에 아이템을 추가하는 것과 같은 것이다. Android Compose는 이와 유사한 것으로 LazyColumn, LazyRow를 사용하곤 하는데, 둘은 스크롤 방향만 다르고 LazyColumn이 주로 사용될 것이다. 기존의 XML 레이아웃 요소와 다르게 LazyCoulmn은 어떻게 스크롤에 대.. 2023. 6. 10.
Kotlin Multiplatform Mobile(KMM) - Start! 최근 크로스 플랫폼에 대한 관심이 많아지고 있다. 그 중에서 가장 관심이 높았던 것은 Flutter와 Kotlin Multiplatform Mobile(KMM)이었다. Flutter는 3.0 이후, 벌써 3.7 버전이 릴리즈 되었다. (이 마저도 시간이 꽤 지났다.) https://medium.com/flutter/whats-new-in-flutter-3-7-38cbea71133c What’s new in Flutter 3.7 Material 3 updates, iOS improvements, and much more! medium.com 그만큼 구글에서도 크로스 플랫폼에 대한 지원을 아낌없이 하고 있다고 봐도 될 것 같고, 그에 따라 여러가지 기업에서도 Flutter를 도입하는 사례가 늘고 채용공고도 .. 2023. 4. 5.
Android - Deep dive into LiveData - 4. MediatorLiveData 이전 포스팅에서 Transformations를 사용하여 LiveData를 다른 LiveData로 변화시켰다. 이번 포스팅은 Transformations 내부에서 사용한 MediatorLiveData에 대해 알아본다. https://developer.android.com/reference/android/arch/lifecycle/MediatorLiveData MediatorLiveData | Android Developers Stay organized with collections Save and categorize content based on your preferences. The android.arch Architecture Components packages are no longer maintain.. 2023. 4. 1.
Android - Deep dive into LiveData - 3. Transformations(map, switchMap) LiveData를 사용할 때 LiveData가 변경되었을 때 값을 수신하고 다른 형태의 데이터로 변환해야 하는 경우가 있다. 예를들면 아래와 같은 상황을 보자. data class User( val firstName: String, val lastName: String, val nickName: String, ... ) private val _userLiveData: MutableLiveData = MutableLiveData() User 객체를 얻어왔을 때, UI에는 firstName과 lastName만을 수신해야한다고 가정해보자. Activity/Fragment에서 User를 UI에서 가공해야 할까? 이는 바람직하지 않다. 왜냐하면 데이터의 가공은 ViewModel 레이어에서 이루어지고, UI는 단지.. 2023. 1. 28.