본문 바로가기
SMALL

Kotlin16

[Kotlin] DiffUtil과 ListAdapter 개요 RecyclerView에서 쓰이는 DiffUtil과 ListAdapter에 대해 소개하겠습니다. 내용 안드로이드 RecyclerView에서 DiffUtil과 ListAdapter은 다음과 같은 기능을 제공합니다: DiffUtil: 이전 데이터와 새로운 데이터를 비교하여 변경된 항목을 찾아내고, RecyclerView에 반영될 수 있도록 합니다. 이를 통해 UI 스레드에서의 끊김 없는 스크롤링을 보장합니다. ListAdapter: DiffUtil을 자동으로 호출하여 데이터 변경을 처리하며, 데이터 모델에 따라 ViewHolder를 생성합니다. 이를 통해 코드를 간소화하고, 데이터 변경에 대한 처리를 단순화할 수 있습니다. 원래는 RecyclerView의 아이템을 갱신하려면 notifyDataSetCh.. 2023. 3. 6.
[Kotlin] Synchronized와 ReentrantLock이란? 1. Synchronized란? Synchronized는 어노테이션을 사용하는 method와 synchronized block을 사용하는 statements 두 가지로 구분할 수 있습니다. 먼저 method는 아래와 같이 '@Synchronized'를 선언합니다. @Synchronized fun syncMethod() = run { } @Synchronized fun syncMethod2() = run { } @Synchronized로 메소드 전체에 lock걸어 해당 method는 한 번에 하나의 스레드에서만 실행됩니다. 주의해야 할 점은 Synchronized를 method에 걸면 같은 클래스의 다른 Synchronized method와 같은 진입조건을 갖게 됩니다. 즉, syncMethod2()라는 .. 2023. 3. 1.
[Paging 고급] 데이터 소스 정의 PagingSource 구현에서는 데이터 소스를 정의하고 이 소스에서 데이터를 가져오는 방법을 정의한다. PagingData 객체는 사용자가 RecyclerView에서 스크롤할 때 생성되는 힌트가 로드되면 PagingSource에서 데이터를 쿼리한다. 현재 GithubRepository는 추가된 후 Paging 라이브러리에서 처리되는 데이터 소스와 관련하여 다양한 작업을 실행한다. 여러 요청이 동시에 트리거되지 않도록 GithubService에서 데이터를 로드한다. 검색된 데이터의 메모리 내 캐시를 유지한다. 요청될 페이지를 추적한다. PagingSource를 빌드하려면 다음 항목을 정의해야 한다. 페이징 키의 유형 : 여기서는 Github API에서 페이지에 1을 기반으로 하는 색인 번호를 사용하므로 .. 2023. 2. 20.
[Paging] UI에 로드 상태 표시 Paging 라이브러리에서 UI에 표시할 항목을 더 많이 가져올 때는 사용자에게 더 많은 데이터를 가져오고 있다고 표시하는 것이 좋다. Paging 라이브러리는 CombinedLoadState 유형으로 로드 상태에 간단하게 액세스하는 방법을 제공한다. CombinedLoadState 인스턴스는 데이터를 로드하는 Paging 라이브러리에 있는 모든 구성요소의 로드 상태를 설명한다. 여기서는 ArticlePagingSource의 LoadState에만 관심이 있으므로 주로 CombinedLoadState.source 필드의 LoadStates 유형을 사용한다. PagingDataAdapter.loadStateFlow를 통해 PagingDataAdapter를 통한 CombinedLoadStates에 액세스할 수.. 2023. 2. 20.
[Paging] UI에서 PagingData 사용 현재 구현에는 특정 조건이 충족되면 더 많은 데이터를 로드하도록 ViewModel에서 호출하는 binding.setupScrollListener()라는 메소드가 있다. Paging 라이브러리는 이 모든 작업을 자동으로 실행하므로 이 메소드와 그 사용법을 삭제할 수 있다. 이제 AriricleAdapter가 더 이상 ListAdapter가 아니라 PagingDataAdatper이므로 간단하게 두 가지를 변경한다. - Flow의 터미널 연산자를 ViewModel에서 collect 대신 collectLatest로 전환한다. - ArticleAdapter에 submitList()가 아닌 submitData() 변경사항을 알린다. 새 PagingData 인스턴스를 내보낼 때 이전 pagingData 내보내기에 관.. 2023. 2. 20.
[Paging] PagingData를 사용하도록 어댑터 설정 PagingData를 RecyclerView에 바인딩하려면 PagingDataAdapter를 사용해야 한다. PagingData 콘텐츠가 로드될 때마다 PagingDataAdatper에서 알림을 받은 다음 RecyclerView에 업데이트하라는 신호를 보낸다. - 현재는 ArticleAdapter에서 ListAdapter를 구현한다. 대신 PagingDataAdapter를 구현하도록 한다. import androidx.paging.PagingDataAdapter ... class ArticleAdapter : PagingDataAdapter(ARTICLE_DIFF_CALLBACK) { // body is unchanged } 이제 UI를 연결하기만 하면 된다. 2023. 2. 20.
LIST