스코프와 메모이제이션

스코프(Scope)와 메모이제이션(Memoization)은 소프트웨어 개발에서 중요한 개념입니다. 이 두 가지 개념은 코드의 성능과 유지보수성을 향상시키는 데 도움이 됩니다.

스코프(Scope)

스코프는 변수와 함수의 유효범위를 나타냅니다. 변수와 함수는 스코프 내에서만 접근할 수 있으며, 스코프 밖에서는 접근할 수 없습니다. 이는 변수와 함수의 이름 충돌을 방지하고, 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다. 스코프는 전역 스코프(Global Scope)와 지역 스코프(Local Scope)로 나뉩니다. 전역 스코프는 코드 전체에서 접근 가능한 범위를 의미하며, 지역 스코프는 특정한 블록 내에서만 접근 가능한 범위를 의미합니다.

var globalVariable = "Global Scope";

function localScope() {
  var localVariable = "Local Scope";
  console.log(globalVariable);  // 전역 변수에 접근 가능
  console.log(localVariable);   // 지역 변수에 접근 가능
}

console.log(globalVariable);    // 전역 변수에 접근 가능
console.log(localVariable);     // 오류 발생! 지역 변수에 접근 불가

메모이제이션(Memoization)

메모이제이션은 함수의 실행 결과를 캐시하여 동일한 입력에 대해 다시 계산하지 않고 빠르게 실행 결과를 반환하는 기법을 의미합니다. 이를 통해 함수의 재계산 시간을 줄이고 성능을 향상시킬 수 있습니다. 메모이제이션은 주로 계산이 오래 걸리는 함수나 반복적으로 호출되는 함수에 적용됩니다. 캐시는 일반적으로 객체나 맵(Map)을 사용하여 관리됩니다.

function fibonacci(n) {
  if (n <= 1) {
    return n;
  } else {
    // 이미 계산된 값이 있는지 확인
    if (fibonacciCache.hasOwnProperty(n)) {
      return fibonacciCache[n];
    }

    // 계산된 값이 없는 경우 계산 후 캐시에 저장
    fibonacciCache[n] = fibonacci(n - 1) + fibonacci(n - 2);
    return fibonacciCache[n];
  }
}

var fibonacciCache = {};
console.log(fibonacci(10));  // 첫 번째 호출: 계산 후 캐시에 저장
console.log(fibonacci(10));  // 두 번째 호출: 캐시에서 값을 가져옴

위 예제는 피보나치 수열을 계산하는 함수에 메모이제이션을 적용한 예시입니다. 이를 통해 중복 계산이 필요 없이 빠르게 결과를 반환할 수 있습니다.

#TechBlog #JavaScript