[kotlin] 코틀린으로 Android Jetpack의 Room 라이브러리를 활용하여 페이징 기능을 구현하는 방법은?
안드로이드 앱에서 대량의 데이터를 처리할 때 페이징은 매우 유용한 방법입니다. Room 라이브러리는 SQLite 데이터베이스를 편리하게 다룰 수 있는 도구로, 페이징을 쉽게 구현할 수 있습니다.
1. 의존성 추가
먼저, 프로젝트의 build.gradle
파일에 Room 라이브러리의 의존성을 추가합니다.
dependencies {
implementation "androidx.room:room-runtime:2.4.0"
kapt "androidx.room:room-compiler:2.4.0"
}
2. 엔티티 및 DAO 생성
다음으로, 페이징할 데이터의 엔티티를 정의하고, 해당 엔티티에 대한 데이터 액세스 객체(DAO)를 생성합니다. 이때, 페이징 라이브러리에서 제공하는 PagingSource
를 사용하여 데이터를 가져오는 메서드를 정의합니다.
@Entity
data class Item(
@PrimaryKey
val id: Int,
val name: String
)
@Dao
interface ItemDao {
@Query("SELECT * FROM Item")
fun getItems(): PagingSource<Int, Item>
}
3. Repository 생성
이후, 데이터 액세스 객체를 사용하여 데이터를 가져오고 관리할 Repository 클래스를 생성합니다.
class ItemRepository(private val itemDao: ItemDao) {
fun getItems(): Flow<PagingData<Item>> {
return Pager(
config = PagingConfig(pageSize = 20),
pagingSourceFactory = { itemDao.getItems() }
).flow
}
}
4. ViewModel 및 UI 작성
마지막으로, ViewModel을 생성하여 Repository로부터 데이터를 가져오고 이를 UI에 노출시키는 작업을 수행합니다.
class ItemViewModel(private val itemRepository: ItemRepository) : ViewModel() {
val items: LiveData<PagingData<Item>> = itemRepository.getItems().liveData.cachedIn(viewModelScope)
}
class ItemFragment : Fragment() {
private val viewModel: ItemViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.items.observe(viewLifecycleOwner) { pagingData ->
// 페이징된 데이터를 처리하는 로직을 작성
}
}
}
위와 같이 안드로이드 Jetpack의 Room 라이브러리와 페이징 라이브러리를 활용하여 안정적이고 효율적인 페이징 기능을 구현할 수 있습니다.
더 자세한 내용은 아래 공식 문서를 참고하시기 바랍니다.