Skip to content

Commit c1fb461

Browse files
committed
feat: 메모리 캐싱 프로토콜, 실 구현체 구현
1 parent c5fded3 commit c1fb461

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// MemoryCacheStore.swift
3+
// DevLogData
4+
//
5+
// Created by opfic on 6/9/26.
6+
//
7+
8+
import Foundation
9+
10+
public protocol MemoryCacheStore {
11+
func value<T: Codable>(forKey key: String) -> T?
12+
func setValue<T: Codable>(_ value: T?, forKey key: String)
13+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//
2+
// MemoryCacheStoreImpl.swift
3+
// DevLogPersistence
4+
//
5+
// Created by opfic on 6/9/26.
6+
//
7+
8+
import Foundation
9+
import DevLogData
10+
11+
final class MemoryCacheStoreImpl: MemoryCacheStore {
12+
private let queue = DispatchQueue(
13+
label: "devlog.memory-cache-store",
14+
qos: .utility
15+
)
16+
private var values = [String: Data]()
17+
18+
func value<T: Codable>(forKey key: String) -> T? {
19+
queue.sync {
20+
let decoder = JSONDecoder()
21+
guard let data = self.values[key] else { return nil }
22+
return try? decoder.decode(T.self, from: data)
23+
}
24+
}
25+
26+
func setValue<T: Codable>(_ value: T?, forKey key: String) {
27+
queue.sync {
28+
let encoder = JSONEncoder()
29+
guard let value else {
30+
self.values.removeValue(forKey: key)
31+
return
32+
}
33+
34+
guard let data = try? encoder.encode(value) else { return }
35+
self.values[key] = data
36+
}
37+
}
38+
}

Application/DevLogPersistence/Sources/PersistenceAssembler.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public final class PersistenceAssembler: Assembler {
1717
UserDefaultsStoreImpl()
1818
}
1919

20+
container.register(MemoryCacheStore.self) {
21+
MemoryCacheStoreImpl()
22+
}
23+
2024
container.register(ThemeStore.self) {
2125
ThemeStoreImpl()
2226
}

0 commit comments

Comments
 (0)