본문 바로가기

분류 전체보기

(54)
[Kotlin] Coroutine (1) - 코루틴이란? 안녕하세요. 오늘은 코루틴에 대해 알아보도록 하겠습니다. 개념 비동기 프로그래밍을 위한 일종의 서브루틴 또는 경량 스레드 입니다. 코드의 일부를 일시 중단하고 나중에 이어서 실행할 수 있는 프로그래밍 요소 입니다. 비동기 프로그래밍은 작업이 완료될 때 까지 기다리지 않고, 다른 작업을 실행하는 프로그래밍 기법입니다. 하지만 서브 루틴과 경량 스레드는 익숙치 않은 개념입니다. 루틴 메인 루틴 프로그램의 시작 지점이자 주 실행 흐름을 담당하는 부분입니다. 메인 루틴은 다른 서브 루틴이나 함수를 호출하고, 프로그램의 주요 로직을 수행합니다. 서브 루틴 메인 루틴에서 호출되어 특정 기능을 수행하는 코드 블록입니다. 함수, 메소드, 프로시저 등으로 불리기도 합니다. 서브 루틴이 실행을 완료하면 호출한 곳으로 돌아..
[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는 이미지 로딩, 캐시 관리 등 다른 네트워크..
Splay Tree (4) - Lazy Propagation, 구간 뒤집기 안녕하세요. Splay Tree의 활용 중에서 lazy propagation과 구간 뒤집기에 대해 알아보겠습니다. Lazy Propagation 스플레이 트리로 레이지 프로퍼게이션 또한 가능합니다. Node 구조체 lazy 변수를 추가해 줍니다. struct Node { ... long long lazy; ... }; Propagation 함수 작성 struct Node { ... void propagate() { if (lazy) { val += lazy; if (l) { l->lazy += lazy; l->sum += lazy * l->cnt; } if (r) { r->lazy += lazy; r->sum += lazy * r->cnt; } } lazy = 0; } }; propagation은 자식으..
[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..