웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > webdevetc

개발 인터뷰 단골 질문 중 하나인 메모이제이션을 알아보자

Last Modified : 2023-11-14 / Created : 2023-11-14
460
View Count
안녕하세요 ~ 웹이즈프리입니다. 오늘은 개발에서 흔히 들을 수 있는 메모이제이션에 대해 이야기해보려 합니다. 개발 인터뷰에서 자주 나오는 메모이제이션은 무엇일까요?



# 메모이제이션(Memoization)이란?


메모이제이션은 성능을 개선시키기 위한 프로그래밍 기술의 하나이며 개발 과정의 복잡한 계산 결과를 반복 사용할 때 매 번 계산하는 것이 아니라 해당 값을 캐싱해 나중에 같은 계산을 빠르게 다시 사용할 수 있게 하는 프로그래밍 기술입니다.


메모이제이션 장점은?


미리 캐싱된 결과를 사용하기 때문에 이미 해두었던 연산을 다시 할 필요가 없습니다. 예를들어 고난이도의 수학 연산을 해결하기 위해서 굉장히 많은 CPU 및 GPU 리소스가 필요할 수 있는데요~ 이 경우 메모이제이션을 활용하면 매 번 똑같은 연산을 반복할 필요가 없기 때문에 굉장히 효율적으로 연산을 수행하게 되어 연산 시간과 리소스가 크게 절약되는 것을 기대할 수 있죠.



피보나치 수열을 사용한 메모이제이션 예제


메모이제이션을 설명할 때 피보나치 수열(Fibonacci squence)을 사용하여 많이 설명합니다. 피보나치 수열은 앞에 선행된 두 개의 결과값에 대하여 합산한 값을 반환하는 데 이때 메모이제이션을 사용하면 이 전에 계산된 캐싱된 결과값을 사용하기 때문에 메모이제이션 방법이 사용됩니다.
// 피보나치 수열
0, 1, 1, 2, 3, 5, 8, 13, ...

아래는 파이썬 언어로 작성된 간단한 피보나치 함수입니다.
def fibonacci_memoized(n, memo={}):
  if n in memo:
    return memo[n]
  if n <= 1:
    return n
  memo[n] = fibonacci_memoized(n-1, memo) + fibonacci_memoized(n-2, memo)
  return memo[n]

위 예제에서 fibonacci_memoized() 함수는 두 개의 인자를 값으로 받으며 첫 번째 값은 해당하는 위치의 값을 인자로 전달하고 두 번째는 캐싱을 위해 저장하기 위한 변수 memo가 사용되었습니다. 이제 memo에 저장된 이미 연산이 완료된 n의 값이 존재하는 경우 그 값을 반환하게 됩니다.


이처럼, 피보나치 수열과 같이 중복된 계산이 굉장히 많이 필요한 경우라면? 이처럼 메모이제이션을 사용하면 이전에 계산한 결과를 저장해두었다가 바로 반환할 수 있어 아주 큰 장점을 가지게 됩니다.

  • 중복된 계산을 피하는 최적화된 프로그래밍에 사용
  • 복잡한 연산으로 리소스가 많이 필요한 경우

그렇다면 메모이제이션과 일반적인 캐싱의 차이는 무엇일까요?


메모이제이션과 캐싱의 차이점은?


일반적인 캐싱은 이전의 값을 저장했다가 반환하는 단순한 결과만 반환합니다. 즉 임의의 저장된 데이터만 사용됩니다. 이에 반하여 메모이제이션은 단순한 결과가 아닌 복잡한 연산이나 프로그래밍을 통해 얻은 결과를 반환하며 성능이나 최적화의 목적을 가진다는 점이 차이점이라 할 수 있겠습니다.


마치며


여기까지 메모이제이션에 대하여 알아보았습니다. 시니어 개발자라면 반드시 알아야하며 주니어 개발자라도 알면 큰 도움이 될 수 있을 것 같습니다. 실제 현업에서 어떤 개발 포지션을 가지느냐에 따라 메모이제이션의 활용 여부는 크게 달라질 수 있을 것 같습니다. 그래도 개발자에게는 반드시 알아야할 부분 중 하나라고 생각됩니다.

위 내용을 다시 정리하면 다음과 같겠네요.

1. 메모이제이션은? 복잡한 계산 결과를 캐싱하는 프로그래밍 기술
2. 피보나치 수열과 같은 최적화 문제, 복잡한 연산에서 메모이제이션을 효과적으로 사용
3. 메모이제이션은 특정 함수의 반환 값을 캐싱하는 반면, 일반 캐싱은 다양한 데이터를 임시로 저장
4. 성능 및 리소스 최적화를 위해 메모이제이션을 활용

Previous

lodash 메소드 throttle 알아보기

Previous

Node Express에서 간단한 Session 구현 방법 및 예제 보기