분류 전체보기
-
Android) asStateFlow() 메소드 알아보기Android 2021. 2. 17. 13:10
저는 요즘 StateFlow를 사용해서 UI 상태 관리 코드를 작성하고 있습니다. ViewModel private val _uiState = MutableStateFlow(State.empty()) val uiState: StateFlow get() = _uiState 어디서 많이 보던 코드 같죠? LiveData를 사용할때 처럼 backing property(외부에서 변경 못하게하고 내부에서 변경이 가능)를 선언하는 방법과 굉장히 유사합니다. 단지 StateFlow는 초기값이 필요하다는 점이 다른 것 같군요. 어쨌든 이런식으로 코드를 작성하고 있었는데, asStateFlow()라는 메소드를 알게 되었습니다. asStateFlow()의 내부는 아래와 같습니다. /** * Represents this mu..
-
Android) Jetpack Paging 3 라이브러리 알아보기Android 2021. 2. 16. 23:56
Paging Paging이란 데이터를 일정한 덩어리로 나눠서 제공하는 것을 의미. 즉 모든 데이터를 가져오는 것이 아닌 한 번에 작은 데이터 덩어리만 가져오는 것입니다. 사용자가 목록 끝에 도달하면 앱에서 더 많은 데이터를 로드합니다. 예를들어 구글에서 어떤 키워드를 검색하는 경우, 검색어에 해당하는 모든 데이터를 화면에 제공하는 것이 아니라 한 페이지당 10개의 데이터씩 데이터를 제공하는 것입니다. 그렇게 되면 성능, 메모리, 비용 면에서 효율적으로 이용할 수 있습니다. Paging3 Library Paging 3 라이브러리는 이전 버전들과 달라진 점들이 있다고 합니다. 그 새로운 기능 중 일부는 다음과 같습니다. Paging3 라이브러리는 다양한 데이터 소스에서 대량의 data set를 효율적으로 관..
-
Android) Airbnb에서 만든 MvRx 알아보기Android 2021. 2. 15. 15:48
이전 글에 작성했던 Epoxy를 통해 구글 알고리즘이 MvRx란 것에 저를 도달하게 하여.. 포스팅해보려고 합니다. 아직 버그 및 이슈들로 불안정한 코드들이긴 하나 Airbnb의 지속적인 지원으로 언젠가 Stable 해지지 않을까 싶습니다. MvRx에 관한 자세한 내용은 공식 문서 참고 바랍니다. MvRx MvRx (mavericks로 발음)는 Airbnb의 거의 모든 제품 개발에 사용하는 Airbnb의 Android 프레임 워크입니다. MvRx는 다음과 같은 기존 기술과 개념을 기반으로 구축되었습니다. Kotlin Android Architecture Components RxJava React (conceptually) Epoxy (optional) Core Concepts State MvRxState..
-
Android) RecyclerView를 쉽게 사용하도록 도와주는 Epoxy 알아보기Android 2021. 2. 15. 13:56
Android에서 복잡한 뷰를 쉽게 개발할 수 있게 해주는 Airbnb의 Epoxy에 대해서 알아보겠습니다. Epoxy Airbnb에서 만든 오픈소스 라이브러리입니다. 여러 뷰 타입을 갖는 RecyclerView에서 효율적으로 사용 가능합니다. 이를 구현하는데 필요한 boilerplate code를 제거해줍니다. 디자인 변경에 빠르게 적응하고 코드를 모듈화하고 관리하기 쉽게 만들기 위한 많은 인터페이스를 제공합니다. 예를 들어 위의 화면들과 같이 3개의 각각 다른 뷰타 입을 가지는 화면이 있습니다. 이를 RecyclerView에서 구현하려면 다음과 같은 것들이 필요합니다. RecyclerView Object RecyclerView.ViewHolder RecyclerView.Adapter Epoxy를 사용..
-
Android) MVVM 패턴 깊게 알아보기Android 2021. 2. 10. 17:40
안드로이드 개발에 있어 대부분 디자인 패턴을 적용하여 개발을 합니다. 대표적으로 MVC, MVP, MVVM, MVI 등이 있습니다. 저는 주로 MVVM 패턴을 적용하여 개발하고 있습니다. MVVM 패턴의 뷰 모델은 모델을 알지만 뷰를 알지 못하고 뷰는 모델을 모르지만 뷰 모델을 알 수 있는 특징에서 오는 서로 의존성이 없다는 장점과 AAC(Android Architecure Component)를 적용하기에 최적화 된 패턴이란 이유로 선택하여 쭉 사용해오고 있습니다. 문득 요즘은 내가 사용하는 기술들에 대해 어느 정도로 깊게 알고 사용, 구현하고 있는지에 의구심이 들고 있어 오늘은 해당 MVVM 패턴에 대해 글을 작성해보려고 합니다. Model MVVM 패턴의 모델도 MVC, MVP 다른 패턴의 모델과 다..
-
Android) FragmentNavigatiorExtras로 Navigation 간 Shared Element 전환하기Android 2021. 2. 9. 16:47
안드로이드 JetPack Navigation을 사용 중일 때 프래그먼트 간에 위와 같이 요소(이미지)를 공유하려면 어떻게 해야 할까요? 안드로이드 공식문서에 이렇게 나와있습니다. FragmentNavigator.Extras 클래스를 사용하면 FragmentTransaction.addSharedElement()를 사용하는 것과 유사하게 공유 요소를 전환 이름으로 한 대상에서 다음 대상으로 매핑할 수 있습니다. 그런 다음 아래 예와 같이 추가 항목을 navigate()에 전달하면 됩니다. FragmentNavigatiorExtras @Suppress("FunctionName") fun FragmentNavigatorExtras(vararg sharedElements: Pair) = FragmentNaviga..
-
Android) 코루틴 Channel과 Flow로 Instant Search 구현하기Android 2021. 2. 8. 22:11
이번 글은 코루틴의 Flow와 Channel을 이용해 순간 검색을 구현해보는 글입니다. 먼저 구현 화면을 첨부하겠습니다. 저는 Room을 통해 저장된 아이템들을 불러오고, 해당 아이템을 검색했을 때의 결과를 화면에 표시했습니다. Instant Search with a flow 첫번째 방법으로 flow & channel을 사용해 구현해 보겠습니다. ViewModel @ExperimentalCoroutinesApi val queryChannel = BroadcastChannel(Channel.CONFLATED) @ExperimentalCoroutinesApi @FlowPreview val searchResult = queryChannel .asFlow() .debounce(300) .distinctUntil..
-
Android) 코루틴 StateFlow와 SharedFlow 알아보기 및 LiveData와 비교Android 2021. 2. 8. 14:59
최근 코틀린 코루틴 라이브러리 (1.4.1)에서 Stable API로 배포된 StateFlow, SharedFlow가 무엇인지와 이들로 LiveData를 대체할 수 있는지를 알아보려고 합니다. StateFlow 기본적으로 상태 처리를 위한 새로운 기본 요소입니다. StateFlow는 값이 업데이트 된 경우에만 반환하고 동일한 값을 반환하지 않습니다. Flow는 일반적으로 cold stream이지만, StateFlow는 hot stream입니다. 즉 일반 Flow는 마지막 값의 개념이 없고 collect 될 때만 활성화 되는 반면 StateFlow는 마지막 값의 개념이 있으며 생성하자마자 활성화됩니다. StateFlow는 ConflatedBoradcastChannel을 대체하기 위해 설계되었습니다. Sta..