[javascript] 스코프와 클로저

자바스크립트에서 스코프(scope)와 클로저(closure)는 중요한 개념입니다. 이 두 가지 개념을 이해하면 변수의 접근 범위와 메모리 관리에 대해 더 잘 이해할 수 있습니다.

스코프

스코프는 변수의 유효 범위를 나타냅니다. 스코프는 전역 스코프(global scope)와 지역 스코프(local scope)로 나눌 수 있습니다. 전역 스코프는 코드 전체에서 접근할 수 있고, 지역 스코프는 특정 블록이나 함수에서만 접근할 수 있습니다.

변수를 선언하면 해당 변수는 선언된 스코프 내에서만 유효합니다. 만약 변수를 선언하지 않고 사용하려 하면 전역 스코프로부터 해당 변수를 찾으려고 합니다. 이를 실수로 전역 변수를 오버라이딩하거나 충돌을 일으킬 수 있습니다. 따라서 변수를 사용할 때는 항상 적절한 스코프에서 선언하고 사용해야 합니다.

클로저

클로저는 함수와 그 함수가 선언된 렉시컬 스코프에 포함된 변수들의 조합입니다. 클로저를 사용하면 외부 함수의 변수에 접근하고 수정할 수 있습니다. 이는 함수가 “상태”를 유지하는 데에 유용합니다.

클로저를 만드는 예제를 살펴보겠습니다.

function outer() {
  let count = 0;

  function inner() {
    count++;
    console.log(count);
  }

  return inner;
}

const closure = outer();
closure(); // 1
closure(); // 2
closure(); // 3

위의 예제에서 outer 함수는 inner 함수를 반환하고 있습니다. 이렇게 반환된 inner 함수는 outer 함수 내의 변수인 count에 접근할 수 있습니다. 이를 통해 count 값을 유지하고 수정할 수 있는 클로저를 생성할 수 있습니다.

클로저를 사용하면 변수를 외부에서 직접 접근하지 않고도 상태를 유지할 수 있으므로, 전역 변수의 남발을 방지하고 코드의 안정성을 높일 수 있습니다.

결론

스코프와 클로저는 자바스크립트에서 중요한 개념입니다. 올바른 스코프를 사용하고 클로저를 활용하면 변수의 접근 범위와 메모리 관리를 효율적으로 처리할 수 있습니다. 이러한 개념을 잘 이해하고 활용하면 좀 더 효율적이고 안정적인 자바스크립트 코드를 작성할 수 있습니다.

참고 자료