class와 Map 자료형을 활용하여 풀이했음
만료기간을 계산하는 로직 때문에 Object 자료형에 setTimeout을 했으나 왜인지 정상동작 하지 않아서 탐구해볼 예정
class TimeLimitedCache {
// 각 요소의 [0] = 값, [1] = 만료일
cacheMap = new Map()
constructor() {}
set(key: number, value: number, duration: number): boolean {
const now = new Date().getTime()
const expired = now + duration
const hasItem = this.cacheMap.has(key) && this.cacheMap.get(key)[1] >= now
this.cacheMap.set(key, [value, expired])
return hasItem
}
get(key: number): number {
// 요소 없음
if(!this.cacheMap.has(key)) return -1
const curItem = this.cacheMap.get(key)
const now = new Date().getTime()
// 유효기간 만료
if(curItem[1] < now) return -1
return curItem[0]
}
count(): number {
const now = new Date().getTime()
let count = 0;
for(const [key, [_, expire]] of this.cacheMap) {
if (now < expire) {
count++;
}
}
return count;
}
}