티스토리 뷰

SwiftUI Tutorial을 진행하다가 List를 동적으로 나타낼때 데이터 모델이 Identifiable Protocol을 채택하게 해서 고유 Key를 식별하는 방법이 있었습니다!

어떤 느낌인지는 대충 알겠지만 뭐든 확실히 알아두는게 좋으니까 공식문서를 한 번 공부하는 시간을 가지겠습니다!!

 

iOS 13.0+ 에서 사용됩니다.

A class of types whose instances hold the value of an entity with stable identity.

이라고 간략히 설명되어 있네요.

인스턴스가 안정적인 Identify를 가진 엔티티 값을 보유하는 타입의 클래스라고 합니다.

쉽게 말해서 클래스가 여러개의 인스턴스를 찍어내어 메모리에 올리고 사용하는데 이 때 그 각각의 인스턴스를 식별할 수 있는 속성을 보유하는 클래스를 보장하는 프로토콜입니다.

 

다음으로 개요를 한 번 봅시다!

개요

Identifiable Protocol을 사용하여 클래스나 value타입에 대한 안정적인 식별자를 제공하세요

예를 들어 앱과 앱의 DB저장소에서 안정적인 id프로퍼티로 사용자 타입을 정의할 수 있습니다.

사용자 이름같은 다른 데이터 필드가 변경되어도 id프로퍼티를 사용해 특정 사용자를 식별할 수 있습니다.

 

자! 이게 무슨 소리냐??

struct User {
    var userName: String
    let id: Int
}

let user = User(userName: "댕우", id: 100)
user.userName = "새우"

일 때 이 user의 userName을 새우로 변경해도 해당 인스턴스는 id를 통해 식별할 수 있잖아요?? 

이런 식별할 수 있는 id라는 프로퍼티를 무조건 구현하도록 Identifiable 프로토콜을 채택하는 것입니다!

그냥 id라는 프로퍼티를 구현해도 되겠지만 추상적인 프로토콜을 의존하는게 유지보수에 좋은걸로 알고 있습니다! (SOLID 원칙!)

만약 Identifiable 프로토콜을 채택하고 id프로퍼티를 생성하지 않으면

Type 'User' does not conform to protocol 'Identifiable'

이라는 문구가 뜹니다!! 

 

프로토콜 내부를 보면 이렇게 두 놈이 있는데

 

associatedtype ID : Hashable

 

var id: Self.ID

 

이거같은 경우엔 [ AssociatedType] 를 참고하고 오시면 좀 더 도움이 될 것 같아요

 

시간이 없어서 못 읽으시는 분께는 어떻게 설명하면 좋을지 모르겠어서 직역을 해보겠습니다!

associatedtype ID : Hashable는

ID는 Hashable 프로토콜을 만족하는 어떠한 타입의 별명입니다.

라는 의미로 해석할 수 있을 것 같습니다.

var id: self.ID 를 사용하기 위함인데. 이는 id프로퍼티를 Int타입으로 사용하거나 String으로 사용하는 등 다양한 타입으로 사용할 수 있게 하기 위함입니다.

 

아래 경우엔 ID 는 Int타입이 되는거구요..

struct User: Identifiable {
    var userName: String
    let id: Int
}

let user = User(userName: "댕우", id: 100)

 

이 경우 ID는 String타입이 되는겁니다.

struct User: Identifiable {
    var userName: String
    let id: String
}

let user = User(userName: "댕우", id: 100)

프로토콜을 정의할때 내부에서 타입이 정해지는 것이 아니라

외부쪽에서 구현할때 타입이 Int , String 등 처럼 정해지는 형태이구요! Hashable 프로토콜을 만족하는 자료형만 가능합니다.

애플에서 제공하는 기본 자료형들은 대부분 Hashable 프로토콜을 준수하기 때문에 문제없이 사용이 가능하고

사용자가 만든 커스텀 타입의 경우엔 Hashable을 채택해야 Identifiable의 id타입으로 사용하실 수 있습니다!!

 

 

'Swift > Protocol' 카테고리의 다른 글

[Swift] Equatable Protocol이란?  (0) 2023.03.29
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
공지사항
링크
Total
Today
Yesterday