[자바스크립트] 클로저

River Moon·2023년 8월 9일
0
post-thumbnail

클로저는 자바스크립트의 매우 중요한 개념이며, 다른 많은 프로그래밍 언어에서도 발견되는 개념이다. 클로저를 이해하면 코드의 동작 방식을 더 잘 이해할 수 있고, 많은 문제를 해결하는 데 도움이 된다.

클로저란

클로저(Closure)는 함수와 함수가 선언된 어휘적 환경의 조합이다. 간단히 말하면, 함수가 자신이 생성됐을 때의 환경을 '기억'하는 것이다. ⇒ 내부함수가 외부함수 변수에 접근 가능

예를 들어:

function outer() {
  let outerVar = '외부 변수';
  function inner() {
    console.log(outerVar); // '외부 변수'
  }
  return inner;
}

const myInner = outer(); //=>inner 함수를 반환! 자신이 생성됐을 때의 환경을 기억! 
myInner(); //=>inner 함수를 호출 출력:'외부 변수' 

여기서 myInnerouter 함수의 내부 함수 inner에 대한 참조를 가지고 있으며, outerVar에도 접근할 수 있다. 이런 방식으로 클로저는 상태를 저장하고 관리할 수 있다. 그냥 outer();로 호출하면 inner 함수를 반환하긴 하지만, 그 반환된 inner 함수를 호출하지 않으니까 아무 일도 일어나지 않는다.

클로저 은닉화

은닉화

  • Information Hiding
  • 외부로부터 데이터를 감추는 것
  • private으로 감춤
  • 내부적으로 사용해야하는 경우 감춤

클로저의 중요한 사용 방법 중 하나는 데이터 은닉화다. 클로저를 사용하면 특정 범위 외부에서는 접근할 수 없는 변수를 만들 수 있다. 이는 객체 지향 프로그래밍의 캡슐화 개념과 유사하다.

function createCounter() {
  let count = 0;
  return {
    increment: function() {
      count++;
    },
    decrement: function() {
      count--;
    },
    getCount: function() {
      return count;
    }
  };
}

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

위의 예에서 count 변수는 createCounter 함수의 내부에서만 접근할 수 있으며, 외부에서는 접근할 수 없다. 이로써 클로저를 통해 변수의 접근을 제어하고, 코드의 안정성과 유지 보수성을 향상시킬 수 있다.

결론

클로저는 함수가 선언될 때의 환경을 기억하게 해주며, 이를 통해 변수를 은닉하거나 상태를 유지하는 등의 복잡한 작업을 수행할 수 있다. 클로저는 자바스크립트 코드를 작성하고 이해하는 데 있어 핵심적인 개념이므로, 충분히 이해하고 활용하는 것이 중요하다.

profile
FE 리버

0개의 댓글