메모리에 데이터를 임시로 저장할 수 있는 클래스
이미지, 파일, 계산 결과 같은 걸 반복적으로 사용할 때
성능을 높이고 네트워크 요청을 줄이기 위해 사용됨
메모리가 부족하면 시스템이 자동으로 캐시를 제거함 (메모리 관리 자동)
딕셔너리처럼 key-value 방식으로 동작
스레드 세이프 — 여러 스레드에서 동시에 접근해도 안전
private let imageCache = NSCache<NSString, UIImage>()
NSString은 캐시의 키 → 이미지의 URL 문자열
UIImage는 캐시의 값 → 실제 다운로드된 이미지
→ 이 URL로 다운로드한 이미지가 있으면 꺼내 쓰는 것
없으면 네트워크로 가져오고 캐시에 저장
fetchImageAsync 함수가 호출됨
imageCache에 해당 URL이 키로 등록된 이미지가 있는지 확인
if let cachedImage = imageCache.object(forKey: urlString as NSString)
있다면 이미지를 그대로 리턴 (네트워크 호출 X)
없다면 다운로드해서 UIImage로 만든 후
imageCache.setObject(image, forKey: urlString as NSString)
캐시에 저장하고 리턴
Objective-C 기반이라 String보다 NSString 타입을 더 지원
그래서 urlString as NSString으로 캐스팅