logo
|
Blog

    [ Swift ] Hashable 타입이란?

    김보람's avatar
    김보람
    Nov 04, 2025
    [ Swift ] Hashable 타입이란?
    Contents
    1. Hashable의 정체2. 왜 Hashable이 필요한가대표적인 사용처3. Diffable Data Source에서 Hashable의 의미왜 중요한가?4. Hashable을 잘못 정의하면 생기는 문제예시 1: 모든 프로퍼티를 해시에 포함한 경우5. 재생성을 막기 위함 이라고 이해해도 되는가- Hashable을 잘 정의했을 때- Hashable을 잘못 정의했을 때

    Hashable은 “이 값이 고유하게 식별될 수 있다”는 것을 Swift에게 보장하는 프로토콜이다.
    조금 더 정확히 말하면, 값의 동일성(identity)을 빠르고 안정적으로 비교하기 위한 규약이다.


    1. Hashable의 정체

    protocol Hashable {
        func hash(into hasher: inout Hasher)
    }
    
    • 객체의 내용을 해시값(hash value) 으로 변환하는 규칙을 정의

    • Swift는 이 해시값을 이용해

      • 동일한 값인지 판단

      • 컬렉션 내부에서 빠르게 탐색

    즉,

    Hashable = “이 값은 다른 값들과 구분될 수 있다”는 계약


    2. 왜 Hashable이 필요한가

    Swift에는 Hashable을 전제로 동작하는 구조들이 있다.

    대표적인 사용처

    • Set

    • Dictionary의 key

    • UICollectionViewDiffableDataSource

    • NSDiffableDataSourceSnapshot

    이 구조들은 순서(index)가 아니라 값 자체로 항목을 관리한다.


    3. Diffable Data Source에서 Hashable의 의미

    typealias Item = AppleFramework
    

    Diffable Data Source에서 Item이 Hashable이라는 것은 다음을 의미한다.

    “이 아이템이 이전 스냅샷의 어떤 아이템과 같은지 판단할 수 있다”

    왜 중요한가?

    Diffable은 내부적으로 다음 질문을 계속 던진다.

    • 이 아이템은 기존에 있던 것인가?

    • 값만 바뀐 것인가?

    • 새로 추가된 것인가?

    • 삭제된 것인가?

    이 판단의 기준이 바로 Hashable이다.


    4. Hashable을 잘못 정의하면 생기는 문제

    예시 1: 모든 프로퍼티를 해시에 포함한 경우

    struct AppleFramework: Hashable {
        let name: String
        let description: String
    }
    

    이 경우,

    • description만 바뀌어도

    • “완전히 다른 아이템”으로 인식됨

    → 셀 삭제 + 재생성 발생


    5. 재생성을 막기 위함 이라고 이해해도 되는가

    정확히는 ‘재생성이 발생하지 않도록 identity를 보장하기 위해서라고 이해하고 넘어가자

    - Hashable을 잘 정의했을 때

    hash / ==  → 고유 ID 기준

    Diffable은 이렇게 판단한다.

    • “아, 같은 아이템이네”

    • “내용만 바뀌었구나”

    → 셀 유지
    → configuration만 다시 호출

    즉,

    • 뷰 계층 유지

    • 스크롤 위치 유지

    • 상태 유지 (선택, 애니메이션 등)

    - Hashable을 잘못 정의했을 때

    hash / == → 모든 프로퍼티 기준
    

    Diffable 판단:

    • “완전히 다른 아이템이다”

    • “기존 건 삭제하고 새로 추가해야겠다”

    → 셀 재생성 발생

    Share article
    Contents
    1. Hashable의 정체2. 왜 Hashable이 필요한가대표적인 사용처3. Diffable Data Source에서 Hashable의 의미왜 중요한가?4. Hashable을 잘못 정의하면 생기는 문제예시 1: 모든 프로퍼티를 해시에 포함한 경우5. 재생성을 막기 위함 이라고 이해해도 되는가- Hashable을 잘 정의했을 때- Hashable을 잘못 정의했을 때

    김보람 | 930802qhfka@gmail.com

    RSS·Powered by Inblog