스코프와 메모이제이션
스코프(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