자 잠깐 메모이제이션에 대해 생각해보자, 함수를 만들 때, memo라는 변수를 사용 하였다. 그게 왜 문제가 될까? // 이거 isPrime 함수에 포함 된 변수가 아닌데.... const memo = new Map () // 엄청 긴 로직 const isPrime = (num) => { if ( memo . has (num)) { console . log ( 'from memo' ) return memo . get (num) } // 생략 ... memo . set (num , res) return res } 자 간단히 memo라는 변수를 삭제했다고 생각해보자, 가능성이 없다고 생각하는가? 우리는 몇라인까지 저 변수를 버리에 기억 할 수 있을까? 5라인? 10라인? 100라인?? 모르겠다. 다만, 필요없다고 생각하여 지워질 수 있다. 혹은 다른 함수에서 참조하게 될 지도 모른다. 이건 매우매우 가능성이 높으며, 예방을 하려면 어떻게 해야할까? const isPrimeFactory = () => { const memo = new Map () return (num) => { if (memo. has (num)) { console . log ( 'from memo' ) return memo. get (num) } let count = 0 for ( let i = 2 ; i <= num ; i++) { console . log ( 'tested' ) if (num % i === 0 ) count++ if (count > 1 ) break } const res = count === 1 memo. set (num , res) return res } } const isPrime = isPrimeFactory () ; 정말 정말 간단하다 외