본문 바로가기
SMALL

분류 전체보기62

2023년 2월 20일 안드로이드를 공부하다가 Module이란 개념을 배웠다. 간단히 말하면 커스텀 뷰 같은 걸 모아놓은 프로젝트를 만들어 사용하는 도구이다. 공통 기능과 UI를 한데 모아서 앱 용량을 줄이고 빌드 속도도 빠르게 만들 수 있다고 한다. 2022년에 NextStep이라는 사이트에 TDD를 배울 때 썼던 방법인데 그 때는 Module에 테스트 코드를 넣어 MVC, MVP, MVVM 패턴으로 공부했던 기억이 난다. 직접 공부해보니 앱이든 웹이든 서버든 TDD는 어느 회사던지 많이 쓰이는 방법론이고 아직 실무에서 경험은 못 했지만 TDD와 동일하게 Module도 어느 회사던지 쓰이는 개념이라고 생각했다. 하지만 프로젝트의 요건에 따라 Module을 쓰지 않아도 되고 개발 기간이 촉박하면 개발에만 충실해야지 안 그러면 .. 2023. 2. 20.
[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.
[Paging] ViewModel에서 PagingData 요청 및 캐시 컴파일 오류를 해결하기 전에 ViewModel을 살펴보겠다. class ArticleViewModel(...) : ViewModel() { val items: StateFlow = ... } ViewModel에 Paging 라이브러리를 통합하기 위해 items의 반환 유형을 StateFlow에서 Flow로 변경한다. 이렇게 하려면 먼저 ITEMS_PER_PAGE라는 비공개 상수를 파일 상단에 추가한다. private const val ITEMS_PER_PAGE = 50 class ArticleViewModel { ... } 다음으로 Pager 인스턴스의 출력 결과가 되도록 items를 업데이트한다. Pager에 매개변수 두 개를 전달하면 된다. - pageSize가 ITEMS_PER_PAGE이고 자리표시.. 2023. 2. 20.
LIST