본문 바로가기

iOS/STUDY

[iOS] Diffable Data Source (CollectionView, TableView)

UICollectionViewDiffableDataSource에 대한 이해를 자세하게 하기 위해 작성하였습니다.

 

TableView, CollectionView 에서 사용하는 DataSource를 구성하는 방법에는 두가지가 있습니다.

 

UICollectionViewDataSource  protocol

The methods adopted by the object you use to manage data and provide cells for a collection view.
데이터를 관리하고 collection view에 대한 cell을 제공합니다.

 

UICollectionViewDiffableDataSource

The object you use to manage data and provide cells for a collection view.
데이터를 관리하고 collection view에 대한 cell을 제공하는 객체입니다. 

 

 

UICollectionViewDataSource 는 프로토콜입니다. 

UICollectionViewDiffableDataSource 는 이 프로토콜을 준수하는 객체이기 때문에 이 객체를 데이터 소스 객체로 사용할 수 있습니다.

 

그렇다면 DiffableDataSource의 차이점은?

DataSource 프로토콜을 사용할 때와 달리 데이터가 달라진 부분을 추적하여 달라진 부분의 UI를 간단하고 효율적인 방식으로 업데이트 합니다.

 

DiffableDataSource 를 사용할 때 얻게되는 효과/장점

  • 추가적인 코드작업 없이도, 퀄리티 있는 에니메이션을 적용할 수 있습니다. (더 좋은 UX)
  • 개선된 Data Source 매커니즘은 완벽하게 동기적인 버그나, 예외, 충돌 상황들을 피할 수 있게 해줍니다.
  • UI 데이터의 동기화 부분 대신 앱의 동적인 데이터와 내용에 집중할 수 있습니다.
  • identifier와 snapshot을 사용하는 간소화 된 Data 모델을 정의 하고, 이를 이용하여 UI를 업데이트 합니다.

 

DataSource
Diffable Data Source

 

 

달라진 데이터를 제공하는 방법

DataSource에 아래의 Snapshot을 생성하여 apply 합니다.

 

UICollectionViewDiffableDataSource

@MainActor class UICollectionViewDiffableDataSource<SectionIdentifierType, ItemIdentifierType> 
	: NSObject where SectionIdentifierType : Hashable, ItemIdentifierType : Hashable

 

NSDiffableDataSourceSnapshot

struct NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>
	where SectionIdentifierType : Hashable, ItemIdentifierType : Hashable

 

Diffable Data Source는 SecionIdentifierType 과 ItemIdentifierType 으로 데이터를 구분합니다.

따라서 이 두 identifier는 Hashable 해야하고 unique 해야합니다.

-> 왜냐?

이 값으로 변화된 데이터 값을 인지하기 때문입니다.

 

 

UICollectionViewDataSource 적용

https://luen.tistory.com/146

 

 

참조

https://developer.apple.com/documentation/uikit/uicollectionviewdatasource/
 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/uikit/uicollectionviewdiffabledatasource

 

Apple Developer Documentation

 

developer.apple.com

https://velog.io/@ellyheetov/UI-Diffable-Data-Source

 

UI Diffable Data Source란?

추가적인 코드작업 없이도, 퀄리티 있는 에니메이션 적용이 가능하다. 개선된 Data Source 매커니즘은 완벽하게 동기적인 버그나, 예외, 충돌 상황들을 피할 수 있게 해준다. UI 데이터의 동기화 부

velog.io