[iOS] Hashable 하다는 게 뭘까? with DiffableDataSource

kimdocs...📄·2023년 5월 12일
0

iOS

목록 보기
14/22
post-thumbnail

DiffableDataSource를 사용하려면 해당 객체가 Hashable해야합니다. Hashable하지 않은 객체인 경우 아래와 같은 에러가 뜨는데요!

Hashable이 뭘까?

"Hashable"은 Swift에서 프로토콜(protocol)로 정의된 특성입니다. Hashable을 채택한 타입은 해시 값을 생성할 수 있는 특성을 갖추고 있습니다.

해시 값은 임의의 길이를 가지며, 동일한 데이터에 대해서는 항상 동일한 해시 값을 생성합니다. 해시 값은 고정된 길이의 숫자로 표현되며, 데이터의 고유한 식별자로 사용될 수 있습니다.

Swift의 Hashable 프로토콜은 데이터의 동등성 비교와 검색을 더 효율적으로 수행하기 위해 사용됩니다!

Hashable 프로토콜을 구현하기 위해서는 해당 타입의 값을 고유하게 식별할 수 있는 해시 값이 필요하며, 이를 위해 해시 함수(hash function)를 구현해야 합니다. 해시 함수는 데이터를 입력으로 받아 해시 값을 생성하는 함수로, 동일한 데이터에 대해서는 항상 동일한 해시 값을 반환해야 합니다.

Swift의 기본 타입(Int, String, Double 등)은 이미 Hashable 프로토콜을 채택하고 있습니다. 또한, 커스텀 타입을 Hashable로 만들기 위해서는 Equatable 프로토콜도 함께 구현해야 합니다. Equatable은 동등성 비교를 위한 프로토콜로, Hashable의 요구사항 중 하나입니다.

Hashable한 구조체 구현하기


Equtable과 Hashable protocol을 상속받아 구현해주면 됩니다.

DiffableDataSource에서는 왜 Hashable한 구조체를 사용해야할까?

DiffableDataSource란?

DiffableDataSource는 iOS 13부터 도입된 데이터 소스의 개선된 버전입니다. 이 데이터 소스를 사용하면 테이블 뷰, 컬렉션 뷰 등의 UI 컨트롤에서 데이터를 효과적으로 관리하고 업데이트할 수 있습니다.

DiffableDataSource는 데이터의 변경 사항을 감지하고, 변경된 데이터만 업데이트하여 UI를 최적화합니다. 이를 위해 데이터의 식별을 위한 고유한 식별자가 필요합니다. 이때 Hashable한 구조체를 사용하여 각 데이터 아이템을 식별합니다.

즉 Hashable한 구조체이어야만 고유 식별할 수 있는 해시값을 생성하여 데이터가 변경되었는 지 여부를 판단할 수 있으므로 Hashable한 구조체를 사용해야합니다!!

profile
👩‍🌾 GitHub: ezidayzi / 📂 Contact: ezidayzi@gmail.com

0개의 댓글