[javascript] 클로저의 활용

클로저란 무엇인가요?

클로저는 함수가 선언될 당시의 환경을 기억하고, 이 환경에 대한 접근 권한을 제공하는 개념입니다. 클로저를 이해하면, 함수 내부의 변수를 보호하거나 상태를 유지할 수 있으며, 함수를 반환하는 함수를 작성할 수도 있습니다.

클로저를 사용한 상태 보존

클로저를 사용하면 함수 내부의 변수를 외부에서 접근할 수 없도록 보호할 수 있습니다. 다음은 클로저를 활용한 카운터 함수의 예시입니다.

function createCounter() {
  let count = 0;
  return function() {
    return ++count;
  };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2

위 코드에서 createCounter 함수는 카운터 함수를 반환합니다. 이 카운터 함수는 외부에서 count 변수에 접근할 수 없지만, 클로저를 통해 이 변수에 접근하여 카운트를 증가시킬 수 있습니다.

클로저를 사용한 정보 은폐

클로저를 사용하면 특정 정보를 외부로 노출시키지 않고 숨길 수 있습니다. 예를 들어, 사용자의 개인 정보를 보호하기 위해 클로저를 사용할 수 있습니다.

function createUser(name, age) {
  let _name = name;
  let _age = age;

  return {
    getInfo: function() {
      return `${_name} is ${_age} years old`;
    }
  };
}

const user = createUser('Alice', 25);
console.log(user.getInfo()); // Alice is 25 years old
console.log(_name); // ReferenceError: _name is not defined

createUser 함수는 사용자 정보를 가지고 있는 객체를 반환합니다. 이 객체에는 클로저를 통해 접근할 수 있는 getInfo 메서드가 포함되어 있어, 외부에서는 _name_age에 접근할 수 없습니다.

결론

클로저는 자바스크립트에서 강력한 기능을 제공하며, 상태 보존과 정보 은폐 등의 다양한 상황에서 유용하게 활용될 수 있습니다. 클로저를 올바르게 활용하면 보다 안전하고 모듈화된 코드를 작성할 수 있습니다.

참고 문헌: MDN Web Docs - Closures