iOS

[iOS] DiffableDataSource, CompsitionalLayout

더구더구 2024. 9. 28. 16:36

DiffableDataSourcef란?

iOS 13부터 도입된 UICollectionView, UITableView의 데이터 소스를 관리하는 도구입니다.

 

 

기존에 UICollectionViewDataSource가 있었는데 왜 등장하였냐 하면

위와 같은 문제가 있었습니다.

Controller가 데이터를 받아와서, UI에 변경을 알립니다, 그러면 섹션 수가 잘못되어 앱이 종료되는 경우입니다.

Controller와 UI가 갖고 있는 데이터가 일치하지 않는 것입니다.(own version of the truth)

따라서 reloadData()로 데이터를 동기화시켜주었어야 합니다.

 

reloadData를 사용해도 괜찮지만 애니메이션 없이 나타납니다. 이는 사용자 경험(UX)을 저하시킵니다.

반면 DiffableDataSourcesms 변경된 데이터 부분에 자연스러운 업데이트를 제공합니다. 

 

따라서 Single Souce Of Truth(SSOT) 데이터의 필요성, 애니메이션과 스크롤 경험,

그렇게 제안된 방법이 DiffableDataSource입니다.

 

 

데이터 snapshot 간의 차이를 계산하여 자동으로 애니메이션과 UI 업데이트를 수행합니다.

그것을 기존 방식인 performBatchUpdated() 보다 쉽게 apply()를 통해 적용할 수 있습니다.

Snapshot이란

한가지 참인 데이터를 관리하는 객체입니다.

기존의 Indexpath를 사용하지 않고, 섹션 및 아이템에 대해 Unique ID와 hashable을 사용합니다.

 

CompsitionalLayout이란?

iOS 13 부터 지원하며 복잡하고 다양한 컬렉션 뷰의 레이아웃을 간단하게 구현할 수 있게 도와줍니다.

 

기존의 UICollectionViewFlowLayout은 대부분 단순한 디자인에서는 좋은 역할을 해왔습니다

다만, 점점 복잡한 디자인이 나오면서 CustomLayout을 직접 구현해주어야 했습니다.

 

 

하지만 CompositionalLayout은 Item, Group, Section으로 구성되며 더 유연하게 복잡한 UI를 구성할 수 있습니다.

  • Item: 컬렉션 뷰에서 하나의 셀을 나타냅니다.
  • Group: 하나 이상의 아이템을 포함하며, 그룹 내에서 아이템들이 어떻게 배치될지 정의합니다.
  • Section: 그룹들을 모아 하나의 섹션이 구성됩니다. 각 섹션에는 개별적으로 다른 레이아웃을 적용할 수 있습니다.

 

각 요소들의 사이즈를 정해주는 방법입니다.