본문 바로가기

분류 전체보기

(60)
[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..
[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를 제어하고 싶으면 아래처럼 코드..
Splay Tree (3) - k번째 수, 구간 쿼리 안녕하세요. Splay Tree의 활용 중 가장 많이 사용되는 구간 쿼리에 대해 알아보겠습니다. Kth 원소 찾기 Tree 상에서 k번째 원소가 무엇인지 찾는 연산입니다. 구간 쿼리를 하려면 kth 원소가 무엇인지 알아야 합니다. first element : 2 second element : 3 4th element : 5 가장 쉽게 구하는 방식으로는, 중위 순회해서 원소들의 리스트를 다 뽑아줍니다. 그리고 그 중 kth 원소를 인덱스를 통해 접근하면 됩니다. 하지만 이 방식은 O(N)의 시간 복잡도가 걸립니다. 스플레이 트리는 이를 다른 방식으로 찾아 O(log N) 만에 가능합니다. Node 구조체 자신을 루트로 하는 서브트리의 크기를 알아야 합니다. 이를 childCnt로 Node 구조체 안에 변수..