본문 바로가기

Android Library

(10)
[Android Library] Retrofit (2) - retrofit in MVVM 안녕하세요. MVVM 디자인 패턴에서 Retrofit이 어떻게 쓰이는지 실제 예시 코드와 함께 살펴보겠습니다. Code https://github.com/shantudas/android-architecture-components-mvvm-retrofit-kotlin GitHub - shantudas/android-architecture-components-mvvm-retrofit-kotlin: This repository contains Android Architecture Component This repository contains Android Architecture Components ( LiveData , View Model and MVVM pattern ) : work in progress -..
[Android Library] Retrofit (1) - 서버와 통신 안녕하세요. 안드로이드 라이브러리 중 하나인 Retrofit에 대해 알아보겠습니다. Retrofit MVVM 디자인 패턴에서 Data Layer에 보면 2가지 라이브러리가 보입니다. Room Retrofit Room은 내부 DB에서 데이터를 가져올 때 사용하는 라이브러리이고, Retrofit은 서버와 HTTP 통신을 통해 데이터를 가져오는 라이브러리 입니다. 비교 안드로이드 앱에서 네트워크 통신을 위한 라이브러리로 구글에서 만든 Volley가 있습니다. 하지만 개발할 때는 Retrofit을 더 많이 사용하는데 아래와 같은 장점이 있기 때문입니다. RESTfull API 통신 Retrofit은 주로 RESTfull API 통신을 위해 설계되었습니다. Volley는 이미지 로딩, 캐시 관리 등 다른 네트워크..
[Android Library] Paging (2) - 프로젝트에 적용해보기 안녕하세요. 이번 포스팅에서는 Paging 라이브러리를 프로젝트에 직접 적용해보겠습니다. 프로젝트 및 코드는 안드로이드 코드랩에서 가져왔습니다. Android Paging 기본사항 | Android Developers Android Paging 기본사항 | Android Developers 이 Codelab에서는 목록을 표시하는 앱에 Paging 라이브러리를 통합합니다. Paging 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드하고 표시 developer.android.com 기존 프로젝트의 문제점 수백 개 가량의 기사 목록을 표시하는 어플이 있습니다. 현재 프로젝트는 500개에 해당하는 기사 items를 정적으로 다 가져와서 표시합니다. => 이를 P..
[Android Library] Paging (1) - 대규모 데이터 안녕하세요. 안드로이드 Jetpack Library 중 하나인 Paging에 대해 알아보겠습니다. Paging? 대용량 데이터(로컬 데이터베이스 or 서버 데이터)를 페이지 별로 로드하고 표시할 수 있게 해주는 라이브러리 입니다. 데이터를 한번에 전부 다 들고오는 것이 아닌, 일정 부분만 들고온 뒤에 필요할 때마다 다음 일정 부분을 들고오게 해줍니다. 대표적으로 구글 검색 엔진이 있습니다. 장점 대용량 데이터를 처리하는 앱에서 모든 데이터를 한 번에 로드하면 아래와 같은 문제점이 발생합니다. 메모리 부족 문제 초기 로딩 시간이 길어짐 Paging을 쓰면 위와 같은 문제를 해결할 뿐만 아니라, 아래와 같은 장점들도 얻을 수 있습니다. 메모리 관리 현재 화면에 보이는 데이터만 로드하기 때문에 메모리 누수를 ..
[Android Library] Hilt (3) - hilt in MVVM 안녕하세요. 안드로이드에서 가장 많이 사용되는 디자인 패턴이 MVVM (Model - View - ViewModel) 입니다. MVVM 디자인 패턴에서 Hilt가 어떻게 쓰이는지 알아보겠습니다. Code https://github.com/aregpetrosyan/Android-MVVM-Boilerplate-Hilt GitHub - aregpetrosyan/Android-MVVM-Boilerplate-Hilt: A sample project in Kotlin to demonstrate AndroidX, MVVM, Coroutines, Hilt A sample project in Kotlin to demonstrate AndroidX, MVVM, Coroutines, Hilt, Room, Data Bindi..
[Android Library] Hilt (2) - 기본 사용법 안녕하세요. Hilt를 사용해서 코드를 리펙토링 해보겠습니다. Gradle 설정 Hilt를 사용하려면 Gradle 설정을 해줘야 합니다. build.gradle (Project 수준) (버전은 공식문서를 참고해주세요) plugins { ... id("com.google.dagger.hilt.android") version "2.44" apply false } build.gradle (App 수준) plugins { ... id("org.jetbrains.kotlin.kapt") id("com.google.dagger.hilt.android") } ... dependencies { ... implementation("com.google.dagger:hilt-android:2.44") kapt("com.go..
[Android Library] Hilt (1) - 의존성 주입 (Dependency Injection) 안녕하세요. 오늘은 Jetpack Library 중 Hilt에 대해 알아보겠습니다. 개념 객체 지향 프로그래밍에서 객체 간의 의존성을 관리하는 방법입니다. 의존성 한 객체에 의해서 다른 객체가 영향을 받는 것을 의존성이라고 합니다 CPU -> Computer Phone -> House (IOT) 코드 상으로 표현하면 아래와 같습니다. class House { val phone: Phone = Phone() } class Phone { } class House는 class Phone을 사용합니다. => House는 Phone에 의존적입니다. 문제점 두 클래스는 강하게 결합되어 있습니다. 하지만 Phone은 한 종류만 있는게 아니죠. A 회사에서 만든 Phone으로 House를 제어하고 싶으면 아래처럼 코드..
[Android Library] Flow (3) - 종류 안녕하세요. 오늘은 Jetpack Library 중 하나인 Flow의 종류에 대해 알아보겠습니다. Cold Flow 이전 포스팅에서 봐왔던 Flow 기본 형식은 Cold Flow 입니다. Cold Flow의 특징은 다음과 같습니다. 특징 - 1 Collector가 있을 때만 data를 emit 함 아래 코드의 출력을 보면 collect()가 있을 때 producer가 data를 stream에 넣기 시작합니다. fun testColdFlow() = flow { println("cold flow is open") for (i in 1..4) { delay(100) emit(i) } println("cold flow is closed\n") } fun main() = runBlocking { val start..