본문 바로가기

안드로이드

(60)
[안드로이드 Jetpack Compose Paging3 시리즈] RemoteMediator 파헤치기 #6 1. 네트워크, 데이터베이스에서 페이징을 구현하기 위한 RemoteMediator 안녕하세요. 지난 포스팅에서는 네트워크 통신만을 이용해서 페이징 기능을 구현했었습니다. 이번 시간에는 안드로이드 Jetpack Compose Paging3 시리즈에서 개념이 어렵다고 생각하는 RemoteMediator의 원리 및 사용방법에 대해서 설명하고, 프로젝트에 RemoteMediator를 적용해 보는 과정을 설명하겠습니다. 2. RemoteMediator 원리 안드로이드 Jetpack Compose Paging3 라이브러리는 RemoteMediator를 제공합니다. RemoteMediator는 네트워크를 통해 가져온 데이터를 페이징 데이터로 활용하는 것이 아니라 로컬 데이터베이스(Room)에 저장합니다. 이렇게 로컬..
[안드로이드 Jetpack Compose Paging3 시리즈] LazyVerticalGrid 구현 및 Navigation #5 1. LazyColumn을 LazyVerticalGrid로 변경 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose Paging3 라이브러리에서 불러온 데이터를 LazyColumn에서 LazyVerticalGrid로 변경하는 과정에 대해 알아보고, 영화 아이템을 클릭했을 때 클린 아키텍처 시리즈에서 구현한 영화 상세 화면으로 이동하는 기능을 Navigation을 통해 구현하겠습니다. 1-1. LazyVerticalGrid 설명 및 구현 LazyColumn이 리스트 형태의 데이터를 세로로 표시하는 데 사용되는 것과 달리, LazyVerticalGrid는 격자(grid) 형태로 데이터를 표시할 때 사용됩니다. 이를 통해 사용자에게 더 다양한 형태의 UI를 제공할 수 있습니다. 이제 Lazy..
[안드로이드 Jetpack Compose Paging3 시리즈] LazyColumn 구현 #4 1. PagingData, LazyColumn을 사용한 무한 스크롤 리스트 구현 안녕하세요. 지난 시간에는 안드로이드 Jetpack Compose의 Paging3 라이브러리를 사용하기 위해 PagingSource와 PagingConfig를 활용하여 네트워크에서 데이터를 페이징 처리하는 방법을 살펴보았습니다. 이번 포스팅에서는 안드로이드 Jetpack Compose의 LazyColumn을 사용해서 Paging3 라이브러리에서 불러온 데이터를 사용자에게 보여주는 기능을 구현하겠습니다. 1-1. LazyColumn 개념 LazyColumn은 Jetpack Compose에서 제공하는 컴포저블 함수로, 화면에 보이는 부분만 렌더링 하기 때문에 RecyclerView와 마찬가지로 리스트를 효율적으로 표시할 수 있게..
[안드로이드 Jetpack Compose Paging3 시리즈] PagingConfig, PagingSource 적용하기 #3 1. Paging 데이터 스트림 구현 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose Paging3 라이브러리의 PagingConfig와 PagingSource를 구현해서 페이징 데이터 스트림을 구현하겠습니다. MovieApi Interface에 영화 리스트를 불러오는 함수를 정의한 후, MovieRepository에 PagingConfig와 PagingSource를 적용해서 Pager 객체를 만들겠습니다. DB 캐싱은 제외한 페이징을 구현할 것이기 때문에 RemoteMediator는 구현하지 않아도 됩니다. 1-1. MovieApi 및 MovieRemoteDataSource에 getMovies 함수 정의 네트워크 통신을 통해 영화 목록을 불러오기 위해 retrofit interfa..
[안드로이드 Jetpack Compose Paging3 시리즈] Paging3 라이브러리 구조 설명 #2 1. PagingConfig, PagingSource, RemoteMediator 개념 안녕하세요. 오늘은 안드로이드 Jetpack Compose Paging3 라이브러리에서 사용되는 개념인 PagingConfig, PagingSource, RemoteMediator에 대해서 포스팅하겠습니다. Paging3 라이브러리를 사용하면 DB 캐싱 여부를 선택할 수 있는데, DB 캐싱은 제외한 페이징 기능 먼저 구현하고, 추후에 RemoteMediator를 구현해서 DB 캐싱까지 포함된 페이징 처리도 하겠습니다. 먼저, 페이징을 구현하기에 앞서 PagingConfig, PagingSource, RemoteMediator 개념에 대해서 설명하겠습니다. 1-1. PagingConfig PagingConfig는 페이징..
[안드로이드 Jetpack Compose Paging3 시리즈] Paging3 라이브러리 소개 #1 1. Paging3 라이브러리 소개 안녕하세요. 오늘은 안드로이드 Jetpack Compose Paging3 라이브러리에 대해 소개하고 이론을 정리하겠습니다. 최근에는 리스트 형태로 많은 정보를 보여주고 상호작용을 하고 있습니다. 특히 모바일에서는 메모리나 공간 절약을 위해 무한 스크롤 방식으로 많이 구현하게 됩니다. 그래서 많은 데이터를 쪼개서 보여주는 Paging 형태로 개발되고 있습니다. Paging3 라이브러리는 이러한 작업을 효율적으로 할 수 있게 해 주며 안드로이드 권장 아키텍처와 함께 사용될 수 있도록 설계된 라이브러리입니다. 직접 써본 결과, Jetpack Compose와 함께 활용될 때 더 강력했던 것 같습니다. 2. Paging3 라이브러리 필요성 대용량 데이터를 가진 애플리케이션에서 ..
[안드로이드 코틀린 Sealed class] 특성 및 코드 예제 #2 안드로이드 코틀린 Sealed Class의 3가지 특성 안녕하세요. 지난 포스팅에서는 Kotlin의 enum class 및 sealed class의 사용 이유에 대해서 살펴보았습니다. 오늘은 sealed class의 특성을 제한된 클래스 계층, 타입 안전성, 그리고 서브 클래스 타입 차이 (class, data class, object) 세 가지 기준으로 설명하겠습니다. 1. 제한된 클래스 계층 sealed class는 Kotlin에서 제한된 클래스 계층을 구성하기 위해 사용되는 특별한 종류의 클래스입니다. sealed class의 가장 큰 특징은 그 하위 클래스가 반드시 sealed class와 같은 파일 내에서 선언되어야 한다는 것입니다. 컴파일러는 sealed class와 같은 파일 내에 선언된 하..
[안드로이드 코틀린 Sealed class] 설명 및 코드 예제 #1 1. 안드로이드 코틀린의 Enum class의 한계 안녕하세요. 지난 포스팅에서는 enum class에 대해 학습했었습니다. 코틀린의 enum class는 속성, 함수를 구현할 수 있어서 다른 언어에 비해서 강력한 기능을 제공해 줬었습니다. 그런데 이러한 enum class에도 한계가 있었는데요. 아래 코드처럼 상수값 별로 다른 데이터 타입이 필요한 경우였습니다. enum class TrafficLight(val guide: String, val additionalData: String?) { RED("Stop", null), // null을 추가해줘야함 YELLOW("Slow down", null), // null을 추가해줘야함 GREEN("Go", "Additional data for green") ..