Android/Architecture

    안드로이드 MVVM 패턴 익히기 (3) Repository  + DI

    안드로이드 MVVM 패턴 익히기 (3) Repository + DI

    앞서 View와 ViewModel을 분리했으나, 현재 ViewModel에는 약간의 문제가 남아있다. 위 그림을 보면 ViewModel은 오로지 Repository만을 참조하고, Repository는 적절한 저장소 (local / remote)를 결정하여 데이터를 가져와야한다. viewModelScope.launch { val searchRepoInfo = service.searchRepo(query) searchArray.value = searchRepoInfo.items totalCount.value = searchRepoInfo.total_count } 현재의 viewModel은 retrofit2을 이용한 remote repository에 직접 접근하여 데이터를 받아오고있다. 그러나 실제에서는 항상 ..

    안드로이드 MVVM 패턴 익히기 (2.5) Coroutine

    Retrofit2 + Coroutine에 대한 기록 비동기처리를 할 때 주로 Rxjava2를 사용하지만, 코틀린에서는 Coroutine 이라는 것을 이용할 수 있다. 특히 서버통신에서 Rxjava대신 Coroutine을 사용하면 낮은 학습곡선 및 보일러 플레이트 코드를 상당히 줄일 수 있다는 장점이 있다. @GET("search/repositories") suspend fun searchRepo(@Query("q") query: String): RepoSearchResponse 기존의 retrofit2만을 사용하던 때와 달리 suspend 수식어를 사용하고, Call 대신 data class type으로 리턴한다. viewModelScope.launch { val searchRepoInfo = servi..

    안드로이드 MVVM 패턴 익히기 (2) LiveData+ViewModel

    안드로이드 MVVM 패턴 익히기 (2) LiveData+ViewModel

    LiveData와 ViewModel 사용방법에 대한 기록. // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0" // navigation implementation "androidx.navigation:navigation-fragment-ktx:2.3.2" implementation "androidx.navigation:navigation-ui-ktx:2.3.2" 먼저 앱수준의 gradle에 의존성을 추가한다. navigation은 Livedata, ViewModel과 마찬가지로 J..

    안드로이드 MVVM 패턴 익히기 (1) DataBinding

    안드로이드 MVVM 패턴 익히기 (1) DataBinding

    MVVM 패턴으로 리팩토링 하는 과정을 기록한다. 토이 프로젝트에 리팩토링 하는 과정으로 먼저 익히고, 결과적으로 이전에 완성한 프로젝트를 리팩토링 하는것을 목표로 한다. MVVM을 쓰는 이유 Activity, Fragment에 많은 코드를 작성하다보면 앱의 동작 속도 저하, 유지보수의 어려움 뿐 아니라 테스트 할때마다 매번 앱을 빌드해야 하므로 시간이 걸린다. MVVM 패턴은 View와 ViewModel의 분리, 의존성 주입, Unit Test등을 통해 이러한 문제들을 해결할 수 있다. 만들 토이프로젝트의 동작은 위와 같다. GitHub api를 이용, repository를 검색하고, 해당 저장소의 정보 및 유저의 정보를 가져온다. MainActivity에서 두개의 fragment를 사용하여 화면 전환..