일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- async
- 오브젝트
- struct
- UserDefaults
- 100 days of SwiftUI
- 동시성
- Codable
- forEach
- 앨런
- COLOR
- 알고리즘
- decode
- 가상 메모리
- 인프런
- Algorithm
- Linked List
- 비동기
- Apple Developer Academy
- 동기화
- 운영체제
- scrollview
- 프로세스 스케줄링
- deadlock
- SwiftUI
- Swift
- 상호배제
- @state
- 데드락
- core data
- IOS
Archives
- Today
- Total
기어가더라도 제대로
[iOS-Swift] CoreData Model의 Entity가 Hashable - \.self 가 가능해지는 이유 본문
Swift - 데이터베이스
[iOS-Swift] CoreData Model의 Entity가 Hashable - \.self 가 가능해지는 이유
Damagucci-juice 2022. 12. 1. 22:49ForEach 문에서 \.self 가 가지는 의미
List {
ForEach([2, 4, 6, 8, 10], id: \.self) {
Text("\($0) is even")
}
}
- 위의 정수형 배열이 변한다고 했을 때 변하는 값만 추적해서 뷰를 다시 짜야함
- 배열에서 값이 유일하다고 인정 받기 위해서, Identifiable 이란 프로토콜을 채택하기도 하는데, 그게 없어도 String, Int 처럼 유일함을 인정받을 수 있음
- \.self : 그 오브젝트 '자체' 를 식별자로 쓰겠다는 의미
- 사실 여기서 String, Int 는 Hashable 이라는 프로토콜을 채택하고 있어서 Struct이긴 하지만 해쉬값으로 변환이 가능하기 때문에 \.self 로 사용이 가능함
- 우리가 추가해주는 커스텀한 타입들도 Hashable 프로토콜을 붙이면 \.self 를 사용할 수 있게됨
Hash 란?
- "Hash Browns" 에서 왔음, 감자를 잘게 다져서 전처럼 먹는 음식
- Struct 에 Hashable을 붙이게 되면, Struct 내부에 Property의 값들을 조합해서 하나의 Hash Value 를 만들어냄
- Int, String 과 같은 기본적인 타입들은 Hashable 이 채택되어 있어서 \.self 사용 가능
- Hash-value 를 만들어내는 여러 방법이 있지만 두가지 원칙은 공통적으로 지킴
- 1. Hash Value 의 Data size 는 고정되어 있다.
- 2. 하나의 Object를 두 번 Hashing 하였을 때 값은 처음과 두번째가 같다.
- 같은 값을 해싱하면 결과가 같다.
- Hash-Value를 다시 되돌려도 Original Value 를 얻을 수는 없음
- 사용처: 데이터 검증할 때 쓰임, Hash Value 가 같은 두개의 파일은 사실 동일한 파일이라고 볼 수 있음
- 해쉬가 쓰이는 곳이 또 있음
- Set, Dictionary의 Key
- 유일한 값이라고 인정을 받으니까 바로 접근하기가 빠름
- Set, Dictionary의 Key
Core Data의 Entity가 \.self 를 사용할 수 있는 이유
- CoreData에서 만드는 클래스들은 기본적으로 Hashable이 적용되어 있음
- Struct의 경우에 가지고 있는 프로퍼티의 값들이 같으면 같은 Hash 값이 나옴
- CoreData 에서 이를 방지하기 위해 Entity에서 프로퍼티를 선택할 때 보이지않는 프로퍼티를 추가하는데, 이것이 ObjectId 임
- 이 UUID와 같은 ObjectId 덕분에, Hashable을 채택해서 \.self 를 사용할 수가 있음
'Swift - 데이터베이스' 카테고리의 다른 글
[iOS-CoreData] Unit Test 해보기 (0) | 2023.02.03 |
---|---|
[iOS-CoreData]Repository Pattern with CoreData (1) | 2023.02.01 |
[iOS-Swift] CoreData Object가 유일하다고 보장하기(feat. constraints) (0) | 2022.12.04 |
[iOS-Swift] CoreData, NSManagedObject Subclass 에서 옵셔널 제거하기 (0) | 2022.12.02 |
[iOS - Swift] CoreData 용어 정리 및 CRUD 사용법 (0) | 2022.10.20 |
Comments