티스토리 뷰
Struct protocol로 Hashable을 쓰는 경우가 있습니다.
import Foundation
struct Landmark: Hashable, Codable {
var id: Int
var name: String
var park: String
var state: String
var description: String
}
이렇게 Fetch할 구조체 모델에 Hashable을 사용하기도 합니다.
Hashable에 대해 알아보겠습니다.
https://developer.apple.com/documentation/swift/hashable
정의: Hashable는 정수 해시값을 생성하게하는 Hash가 가능한 타입이라고합니다.
그럼 Hash가 무엇이냐.
Hash는 데이터를 관리 및 유지하는 자료구조로
데이터들을 하나의 규칙(Hash Function)으로 분류하고, 그 분류(Key)에 따라 해당 값(Value)를 저장하는 형태를 뜻합니다.
일단 이렇다 하는데 예제코드를 보면 바로 아실수 있을거라고 생각합니다.
Hashable protocol을 사용하기위해서는 hash(into:) method 를 꼭 구현해야하는데
이 메소드는 Hash object를 입력받고, 해시되는 유형의 타입을 명시해야합니다.
struct Person: Hashable {
var name: String
var age: Int
func hash(into hasher: inout Hasher) {
hasher.combine(name)
hasher.combine(age)
}
}
이런식으로 Person구조체가 Hash형태 준수하도록 구현해줄 수 있습니다.
이 구현에서 hasher.combine() method를 사용하여 name과 age 속성을 갖는 해시 구조체를 생성했다고 합니다.
dictionary 또는 set 유형의 hash 값을 사용해 빠르게 원하는 값을 찾을 수 있습니다.
예시입니다.
struct Person: Hashable {
var name: String
var age: Int
func hash(into hasher: inout Hasher) {
hasher.combine(name)
hasher.combine(age)
}
}
var ageDictionary = [Person: Int]()
let alice = Person(name: "Alice", age: 25)
let bob = Person(name: "Bob", age: 30)
ageDictionary[alice] = alice.age
ageDictionary[bob] = bob.age
print(ageDictionary[alice]) // Output: Optional(25)
Hashable 구조체 Person을 만들고 해당 Person을 Key값으로하는 ageDictionary를 생성할 수 있습니다.
그러고 해당 dict의 key값으로 alice라는 Person객체와 bob이라는 객체를 넣을 수 있으며,
ageDictionary[key값]으로 배열에 빠르게 탐색이 가능합니다.
어느정도 빠르게 접근이 가능하냐면
기존 배열의 index값에 해당하는 value를 탐색할때는 O(n)이 걸리는데에 반해
해시로 탐색할 경우 O(1)이 걸린다고 합니다.
대신에 메모리영역에서 많은 공간을 차지한다고 합니다.
그래서 자주 찾게되고 공간이 많이 차지하지 않는 배열을 탐색할때 Hash화 하여 사용하면 좋은듯 합니다.
- Total
- Today
- Yesterday
- swift 자간
- swift urlsession refactoring
- swift urlsession network module
- filemanager excel read
- deep timer
- focus timer 어플
- swift urlcomponent encode
- swift 네트워크 모듈화
- llm csv
- swift network 공통화
- chatgpt rag llm
- swift filemanager get excel
- swift queryitem encode
- swift excel read
- 구글 타이머 어플
- swift 엑셀 가져오기
- rag 기반 llm 챗봇
- swift urlsession module
- swift network refactoring
- google timer 어플
- swift filemanager excel
- llm pdf rag
- rag 기반 llm
- rag llm pdf
- swift network module
- swift 엑셀 읽기
- 타이머 어플
- google timer application
- swift get excel
- swift urlsession 공통화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |