SW사관학교 정글7기 개발일지 (08/22)

c4fiber·2023년 8월 25일
0

SW사관학교 정글7기

목록 보기
16/49

메모이제이션과 캐싱의 관계

캐싱 (caching)

caching이란 자주 접근하는 데이터를 빠른 접근이 가능한 공간(주로 cache memory)에 저장해두고 이를 반복적으로 사용하는 것을 말한다.

내가 웹서핑을 하면서 네이버 홈페이지, SW사관학교 정글 github 주소 등을 북마크에 저장해두고 사용한다고 하면

빠른 웹서핑을 위해 북마크를 저장해두는 행위를 캐싱이라고 볼수 있다.
또한 북마크에 저장된 주소의 페이지 구성을 캐싱하여 빠르게 로딩하는 것도 포함할 수 있다.

메모이제이션 memoization

내가 increse_one(target) 이라는 함수를 정의해두고 인자를 2로 반복적으로 호출하게 되면 return target + 1이 매번 수행하게 될 것이고 같은 연산을 반복적으로 수행할 것이다.

여기서 메모이제이션을 적용한다면 target = 2의 결과인 3이 cache 혹은 memeory에 저장되어서 이 값에 접근하는 것 만으로도 increase(2)를 수행한 결과를 얻게 된다.

단. 이를 적용하기 위해서는 pure function이라는 전제조건이 필요하다.

pure function

pure function, 순수 함수는 같은 인자(argument)을 사용하면 항상 같은 값이 나오는 함수를 말한다.

pure function이 아닌데 메모이제이션을 적용한다면?

만약 next_number(target)이라는 함수를 만들고 next_number(1)를 호출 할 때마다 값이 1, 2, 3 이런식으로 반환되게 설계했다고 하면 처음next_number(1) 호출시의 결과 1을 저장할 것이다.

그 다음에 next_number(1)을 호출하는 순간 저장된 값 1을 불러올 텐데 내가 예상한 값은 2이기 때문에 문제가 발생할 수 있다.

그렇다면 캐싱과 메모이제이션은 같은가?

엄연히 말하면 다르다고 볼 수 있다.

캐싱은 내가 같은 데이터에 반복적으로 접근할 때 속도를 빠르게 하기 위해서 사용하는 방법이고

메모이제이션은 같은 인자를 집어넣은 함수의 결과 값을 저장해서 가져와 같은 연산을 줄이는 방법이라고 할 수 있다.

메모이제이션을 구현하기 위해 이전에 수행된 결과 값을 저장하는 행위가 캐싱이라고 볼 수 있다.
또한 이를 더 빠르게 하려면 캐싱을 사용하여 이전의 연산 결과를 빠르게 가져오는 방법을 사용할 수는 있으나 메모이제이션 자체가 캐싱이라고 할 수는 없다고 생각한다.


참고 블로그: useMemo-useCallback은-캐싱이-아니다

profile
amazing idiot

0개의 댓글