Android
-
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..
-
Android) LiveData와 Coroutine Flow 비교해보기Android 2021. 2. 5. 15:16
요즘에 코루틴의 flow를 사용해서 안드로이드 개발을 하고 있는데, LiveData와 함께 flow를 사용 시 올바르게 사용하고 있는 건지에 대한 궁금증이 생겨서 적합한 방법에 대해 글을 써보려고 합니다. Introduction LiveData는 일반적으로 데이터 전송을 위한 용도로 사용됩니다. Flow 또한 고유한 방식으로 데이터를 전송하고 비동기 작업을 수행하는 기능이 있습니다. 둘 다 한계와 장점이 존재합니다. What is LiveData? LiveData는 AAC에서 소개되었고, 대부분의 개발자들은 MVVM 패턴에서 LiveData를 사용하여 ViewModel에서 데이터를 communicate 또는 transfer 하여 메모리 누수를 줄임으로써 수명주기 인식을 보장하고 있습니다. 간단히 말해 L..
-
Android) FloatingActionButton 이미지 색상 변경하기Android 2021. 1. 29. 16:19
[FloatingActionButton] FAB Icon is Always Black 플로팅 액션 버튼에 android:src로 이미지를 넣어주려는데 이미지의 색상이 항상 검은색인 이슈가 발생했습니다. 위와 같은 하얀색의 이미지를 FAB에 넣어보겠습니다. 이미지의 색상이 하얀색임에도 불구하고 FAB에서 이미지의 색상이 검은색으로 보입니다. Solved app:srcCompat 사용 app:tint="@android:color/white" 사용 app:tint="@null" 사용 저는 1번은 적용되지 않았고 2번, 3번으로 해결할 수 있었습니다. 검정색 배경의 FAB에 테두리를 제거하고 3번 방안을 적용한 모습입니다.
-
Android) 안드로이드에서 Coroutine의 ViewModelScope와 LiveData Builder 알아보기Android 2021. 1. 21. 16:37
일반적으로 코루틴을 안드로이드 ViewModel과 사용할 때 SupervisorJob을 이용하여 생명주기와 맞물려 사용합니다. ViewModel은 UI에서 보여줄 데이터를 관리하기 위해 사용됩니다. Activity나 Fragment 같은 컴포넌트의 생명주기를 따라가 destroy 됐을 때 onCleared()를 호출하며 해제되는 특징이 있습니다. (SupervisorJob = Job은 모든 자식들을 취소 시킬 수 있지만, SupervisiorJob은 취소가 아래 방향(부모->자식)으로만 전파됩니다.) ViewModel은 bussiness logic(기획적인 부분)을 가지고 있기 때문에 비용이 큰 작업을 처리해야 하는 경우가 있습니다. onCleared()가 호출되고 ViewModel이 메모리에서 해제되면..