[javascript] 클로저를 활용한 객체 확장

자바스크립트에서 클로저는 객체 확장에 매우 유용하게 사용될 수 있습니다. 클로저를 이용하면 프라이빗한 변수를 구현하고, 객체의 상태를 안전하게 유지할 수 있습니다. 이번 블로그에서는 클로저를 사용하여 객체를 어떻게 확장하는지 살펴보겠습니다.

클로저란 무엇인가?

클로저는 함수와 그 함수가 선언될 때의 렉시컬 환경(Lexical Environment)과의 조합입니다. 클로저를 사용하면 함수가 다른 영역에서 호출되더라도 해당 함수가 선언된 렉시컬 환경에 접근할 수 있습니다. 이는 함수 내에서 선언된 변수들에 대한 접근 권한을 유지할 수 있게 합니다.

객체 확장에 클로저 활용하기

이제 클로저를 사용하여 객체를 확장하는 방법을 알아보겠습니다. 아래의 예제는 클로저를 사용하여 카운터 객체를 확장하는 방법을 보여줍니다.

function createCounter() {
  let count = 0;

  function increment() {
    count++;
  }

  function decrement() {
    count--;
  }

  function getCount() {
    return count;
  }

  return {
    increment,
    decrement,
    getCount
  };
}

const counter = createCounter();
counter.increment();
counter.increment();
console.log(counter.getCount()); // Output: 2

위의 예제에서 createCounter 함수는 클로저를 반환하고 있습니다. 이 클로저는 count 변수를 은닉하고, increment, decrement, getCount 함수들을 통해 해당 변수를 조작할 수 있도록 합니다.

이렇게 하면 카운터의 상태를 외부에서 직접 조작하는 것이 아니라 클로저 내부에 숨겨진 변수를 통해 제어할 수 있습니다.

결론

클로저를 이용하면 객체의 상태를 안전하게 유지하고, 프라이빗한 상태를 유지할 수 있습니다. 이는 객체의 상태를 외부로부터 보호하면서도 필요한 메서드를 통해 상태를 조작할 수 있도록 합니다.

클로저를 사용하여 프라이빗한 상태와 퍼블릭한 인터페이스를 갖는 객체를 구현하는 것은 객체지향 프로그래밍에서 매우 유용한 패턴 중 하나입니다.

이처럼 클로저는 객체 확장뿐만 아니라 다양한 상황에서 유용하게 활용될 수 있으며, 자바스크립트에서 많은 디자인 패턴에 사용됩니다.