[go] 클로저(Closure) 개념 이해하기

클로저는 함수와 그 함수가 선언된 렉시컬 환경(Lexical Environment)과의 조합입니다. 클로저는 함수가 자유 변수(free variable)에 대한 참조를 유지하고 있는 경우에 발생합니다. 클로저는 함수가 다른 함수 중첩(nested) 내부에 선언되어 있는 경우에 주로 나타납니다.

클로저 구성 요소

클로저는 다음 세 가지 구성 요소를 가지고 있습니다.

  1. 함수: 자유 변수를 참조하고 있는 함수
  2. 자유 변수: 함수 바깥에서 선언된 변수로, 함수 내부에서 사용되는 변수
  3. 렉시컬 환경: 클로저가 선언될 때의 환경, 즉 변수 식별자(identifier)와 그에 대응하는 값으로 이루어진 환경

클로저 동작 원리

함수가 클로저인 경우, 그 함수를 포함하는 외부 함수의 스코프에서 선언된 변수를 참조할 수 있습니다. 이는 외부 함수가 종료된 이후에도 해당 변수에 접근할 수 있는 것을 의미합니다. 이러한 특성은 함수형 프로그래밍에서 매우 유용하게 활용됩니다.

클로저는 주로 콜백 함수나 비동기 작업, 상태 관리 등 다양한 상황에서 활용됩니다.

예를 들어, 아래의 JavaScript 코드는 클로저를 보여주는 예제입니다.

function outerFunction() {
  let outerVariable = 'I am from outer function';

  function innerFunction() {
    console.log(outerVariable); // outerVariable을 참조
  }

  return innerFunction;
}

const inner = outerFunction();
inner(); // "I am from outer function" 출력

위의 예제에서 innerFunction은 외부 함수 outerFunction의 변수 outerVariable에 접근하여 이를 출력합니다.

클로저의 개념을 이해하면, 함수형 프로그래밍에서 변수 스코프와 생명주기에 대한 이해를 높일 수 있습니다.

결론

클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합으로, 함수가 자유 변수에 대한 참조를 유지하고 있는 경우에 발생하는 개념입니다. 클로저를 이해하면 프로그램의 구조를 더 잘 이해하고, 유지보수가 용이한 코드를 작성할 수 있습니다.

더 자세한 내용은 아래의 링크를 참고하세요.