본문 바로가기

카테고리 없음

클로저(Closure)란?

🎯 클로저(Closure)란 무엇인가요? 🧐

안녕하세요! 👋 오늘은 클로저에 대해 알아보겠습니다! 😊

1️⃣ 클로저의 정의 📚

클로저는 자신이 생성될 때의 환경을 '기억'하는 함수입니다. 즉, 함수가 속한 렉시컬 스코프를 기억하여, 함수가 렉시컬 스코프 밖에서 실행될 때도 접근할 수 있는 것을 말합니다. 🧩

// 클로저 예제
function outer() {
  let outerVar = 'Outer';
  
  function inner() {
    console.log(outerVar); // 이 때의 outerVar는 클로저에 의해 접근 가능합니다.
  }

  return inner;
}

const closureFunc = outer();
closureFunc(); // 'Outer'

위 코드에서 `closureFunc`는 `outer`함수의 `inner`함수를 참조합니다. `inner` 함수는 외부 스코프인 `outer`함수의 변수 `outerVar`에 접근하며, 이는 클로저의 특징을 잘 보여주는 예시입니다. 👏

2️⃣ 클로저의 특징 🌟

🔹 렉시컬 스코핑

클로저는 렉시컬 스코핑을 따릅니다. 함수가 선언될 때 그 위치에 따라 상위 스코프를 결정하는 방식이 바로 렉시컬 스코핑입니다. 클로저는 이 렉시컬 스코핑을 기반으로 동작합니다. 💼

🔹 상태 유지

클로저는 상태를 기억하고 변경할 수 있습니다. 클로저로 참조되는 자유 변수는 함수가 종료된 이후에도 사라지지 않고 메모리에 유지됩니다. 이 특성 때문에 클로저는 이전에 참조한 변수를 계속 참조할 수 있습니다. 📦

3️⃣ 클로저의 스코프 범위 🌍

클로저는 두 가지 스코프를 가집니다.

🔹 생성 시점의 스코프

클로저는 자신이 생성될 때의 환경, 즉 스코프를 기억합니다. 이는 클로저가 선언 된 위치의 스코프와 그 상위 스코프를 포함합니다. 🗃

🔹 실행 시점의 스코프

클로저는 실행되는 위치의 스코프 또한 접근 가능합니다. 따라서 클로저는 생성 시점의 스코프와 실행 시점의 스코프, 두 가지 스코프를 참조할 수 있습니다. 🎭

4️⃣ 클로저 패턴 🎨

클로저는 여러 패턴에서 활용됩니다. 이 중 몇 가지를 살펴보겠습니다.

🔹 데이터 은닉과 캡슐화

// 데이터 은닉과 캡슐화 예제
function Counter() {
  let count = 0; // 이 변수는 외부에서 접근 불가능합니다.

  return {
    increase() {
      count++;
      console.log(count);
    },
    decrease() {
      count--;
      console.log(count);
    },
  };
}

const counter = Counter();
counter.increase(); // 1
counter.decrease(); // 0

위 예제에서 `Counter` 함수는 객체를 반환하며, 이 객체의 메소드는 클로저를 통해 `Counter`의 지역 변수인 `count`에 접근합니다. 이런 방식은 데이터 은닉과 캡슐화를 가능하게 합니다. 🕵️‍♀️

🔹 부분 적용 함수와 커링

// 부분 적용 함수와 커링 예제
function multiply(a, b) {
  return a * b;
}

function partial(func, a) {
  return function(b) {
    return func(a, b);
  };
}

const double = partial(multiply, 2);
console.log(double(3)); // 6

위 예제는 `partial` 함수를 통해 `multiply` 함수의 일부 인수를 고정하여 새로운 함수를 만드는 부분 적용 함수와 커링을 보여줍니다. `double` 함수는 클로저를 통해 `multiply`와 인수 `2`를 기억합니다. 🧮

5️⃣ 클로저를 활용한 실습 🛠️

이제 여러분도 클로저를 이용하여 간단한 코딩을 해보시기 바랍니다.

예를 들어, 클로저를 활용하여 고객들의 ID와 비밀번호를 안전하게 보호할 수 있는 로그인 시스템을 만들어 보세요. 😎

📝 마치며

클로저는 자바스크립트의 중요 한 개념 중 하나입니다. 이번 글을 통해 클로저의 정의, 특징, 스코프 범위, 그리고 클로저 패턴에 대해 알아보았습니다. 😁

더 깊이 알아보고 싶다면, MDN의 클로저 가이드를 참조하세요. 📖

여러분의 코딩 여정에 도움이 되기를 바랍니다. 🙏 이 글에 대해 궁금한 점이나 오류를 발견하셨다면, 댓글로 알려주세요! 👇