MVVM 19

[Android] Circuit + Compose로 Pokedex를 구현해보자. (feat. MVI)

Jetpack Compose의 버전이 올라가면서 필수 기술스택이 되어가고 있습니다.그러면서 Compose를 활용하기 좋은 아키텍처에 대한 관심도도 자연스럽게 증가하고 있으며,그러한 아키텍처로 MVI가 자리잡고 있는 듯 합니다.저 또한 프로젝트에서 Compose를 최대한 활용하려 하며,Compose를 사용하지 않더라도 Compose와의 마이그레이션을 고려하여 MVI를 주요 아키텍처로 사용하고 있습니다.이러한 덕분에 MVI 아키텍처를 위한 다양한 라이브러리들에 대한 관심도 매우 높아지고 있는데,주로 언급되는 라이브러리는 orbit-mvi, mavericks 정도가 있고, 최근 주목받기 시작한 circuit이 있습니다.Circuit?Circuit은 Slack에서 만든 프레임워크로, 실제 슬랙의 프로덕션에서 사..

개발/Android 2024.12.01

Android - 상태관리, LiveData 대신 StateFlow를 사용하자.

현재 안드로이드 생태계는? 현재 안드로이드 생태계는 MVVM 아키텍처, 클린아키텍처가 대세가 되고, MVI 아키텍처가 점점 핫해지고 있다. 그만큼 개발 기술이 빠르게 발전하고 있고, 더욱 강력한 도구들이 생겨나고 있다는 것이다. Google에서 Android Architecture Compoenent로 여러가지 도구를 제시하고 있고, 그 중에 ViewModel과 LiveData는 정말 핫하고 유용하며, 현재 안드로이드 앱 개발에 있어서 가장 기본적인 도구로 몇년동안 자리잡고 있다. 그러나 시간이 지나면서 이들도 구시대의 기술이 되어가는 것은 당연하다. 영원히 최고의 도구는 없으니까. 오늘은 그 중 하나인 LiveData에 대해, 그리고 이를 대체할 StateFlow에 대해서 얘기해본다. 상태관리, 그리고..

개발/Android 2023.08.03

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..

개발/Android 2023.04.01

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는 단지..

개발/Android 2023.01.28

Android - Deep dive into LiveData - 2. setValue vs postValue

LiveData를 사용할 때, 데이터의 변경은 어떻게 할 수 있을까? 제목에도 나와있듯이, setValue와 postValue가 있다. 왜 두 가지 방법이 있을까? 무슨 차이가 있는지 알아보자. public abstract class LiveData { ... /** * Sets the value. If there are active observers, the value will be dispatched to them. * * This method must be called from the main thread. If you need set a value from a background * thread, you can use {@link #postValue(Object)} * * @param value ..

개발/Android 2023.01.21

Android - Deep dive into LiveData - 1. LiveData가 무엇인가요?

안드로이드 앱 개발에 가장 많이 활용되는 Jetpack Component를 꼽으라고 한다면 LiveData는 손에 꼽힐 것이다. 앱 규모가 커지고 복잡해지면서 상태관리가 중요해졌다. 그러다보니 자연스레 MVVM도 표준 아키텍처로 자리잡혔고, 이를 충분히 활용하기 위해 ViewModel과 LiveData가 사용된다. 이번 포스팅 주제로, 안드로이드 프레임워크에서 상태관리를 하기위해 안성맞춤인 LiveData에 대해 자세히 알아본다. LiveData? 공식 문서에서 소개하는 LiveData를 꼭 읽어보길 바란다. https://developer.android.com/topic/libraries/architecture/livedata?hl=ko LiveData 개요 | Android 개발자 | Android ..

개발/Android 2023.01.21

[Android] Jetpack Compose + Flow로 네트워크 연결 상태 처리를 해보자.

저는 안드로이드 관련된 Medium 포스팅을 메일로 전달받고 있습니다. 최근 제목과 같이 Jetpack Compose와 Flow를 활용하여 네트워크 연결 상태 처리를 하는 포스팅을 보고 예제를 간단하게 작성하여 포스팅하려 합니다. 참고한 Medium 링크는 아래와 같으니, 원문을 보고 싶다면 참고하면 됩니다. https://attilaakinci.medium.com/network-connectivity-on-compose-a35f6efa1a5c Network Connectivity on Jetpack Compose Brief story on network connectivity usages on modern android development style with jetpack compose support..

개발/Android 2021.12.26

Flutter - 11. TodoList App (4) TodoList에 BLoC 패턴을 적용해보자.

전 포스팅에서 Database를 연동하는 작업을 마쳤었다. 문제는 UI를 그려내는 Widget에서 상태와 데이터 접근을 모두 하기 때문에 역할 분리가 제대로 되지 않았다. 상태가 복잡해질수록, 데이터가 많아질수록 Widget이 가지는 역할이 너무 많아지며, 관리가 점점 어려워지고 스파게티 코드가 될 수 있다. 이러한 문제를 해결하기 위해서 Android, iOS 진영은 MVVM, MVP, RIBs 등의 아키텍처 패턴, 클린 아키텍처 패턴들을 도입한다. 클린 아키텍처 패턴은 위와 같다. 이에 대한 상세한 내용은 생략하겠다. 이를 위한 포스팅은 아니니. 아무튼, 이러한 패턴 적용의 이유는 서로의 역할을 분리하고 의존성을 줄인다. 어떤 한 모듈에 변화가 생겨도 다른 모듈에 변화가 없거나 최소화하고, 유지보수성..

개발/Flutter 2021.01.27

[Android] Kotlin + MVVM + AAC 로 Todo 앱 만들기 - 6 (ViewBinding, DataBinding)

한참전에 DataBinding을 적용하기로 했었는데, 까맣게 잊고 있었다. 내 포스팅을 보고 공부하시는 분께서 DataBinding을 요청하셔서 추가로 포스팅한다. (게으른 나를 반성..) 귀찮으신 분들을 위한 최종코드 Github : github.com/DuItDDu/Android-Codelabs/tree/master/MyTodo 1. ViewBinding, DataBinding이 무엇인가? developer.android.com/topic/libraries/view-binding 뷰 결합 | Android 개발자 | Android Developers 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합..

개발/Android 2021.01.20

[Android] Dependency Injection (a.k.a DI) - 4. 기반코드를 Hilt로 리팩토링 해보자!

자, 이번 포스팅에선 Hilt를 사용해보자. developer.android.com/training/dependency-injection/hilt-android?hl=ko Hilt를 사용한 종속 항목 삽입 | Android 개발자 | Android Developers Hilt는 프로젝트에서 수동 종속 항목 삽입을 실행하는 상용구를 줄이는 Android용 종속 항목 삽입 라이브러리입니다. 수동 종속 항목 삽입을 실행하려면 모든 클래스와 종속 항목을 수동으로 구성 developer.android.com Hilt에 대해선 위 문서를 참고 하는것을 추천한다. 현재까지 나온 버전은 alpha 이지만, 드로이드나이츠를 보니 많은 개발자분들이 벌써 Dagger, Koin에서 Hilt로 갈아타고 있는 것 같았다. 나 ..

개발/Android 2020.10.25
반응형