[JS] 클로저(Closure)

eunseok·2023년 10월 14일
1

js공부

목록 보기
19/27

클로저란?

간단히 말하면, 클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.

렉시컬 환경이란, 해당 함수 내부의 변수뿐만 아니라 외부의 변수에도 접근할 수 있는 범위를 의미한다.

JavaScript에서 모든 함수는 클로저이다. 즉, 각각의 함수는 자신이 선언된 환경에 대한 정보를 기억하고 있으며, 그 환경에 있는 변수들에 접근할 수 있는 권한을 가지고 있다.

function outerFunction(outerVariable) {
    return function innerFunction(innerVariable){
        console.log('outerVariable:', outerVariable);
        console.log('innerVariable:', innerVariable);
    }
}

const newFunction = outerFunction('outside');
newFunction('inside');  // logs: "outerVariable: outside" and "innerVariable: inside"

위 코드에서 newFunction은 innerFunction을 참조하고 innerFunction은 외부 함수인 outerFunction의변수인 'outside'에 접근할 수 있다. 이러한 현상이 가능한 것이 바로 클로저 때문이다.

클로저를 사용하는 이유

클로저는 데이터 은닉, 캡슐화 등과 같은 프로그래밍 기법을 구현하는 데 유용하다. 예를 들어, 특정 데이터에 대한 접근을 제어하거나 private 변수를 만드는데 사용함.

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

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

위 코드에서 createCounter 함수는 카운터 역할을 하는 익명 함수를 반환한다.
여기서 중요한 것은 반환된 함수가 count라는 변수에 계속해서 접근 가능하다는 점이다.

결론

클로저는 함수가 선언된 렉시컬 환경을 기억하여, 함수가 해당 환경 밖에서 실행될 때도 그 환경에 접근할 수 있게 하는 javascript의 특성이다.

렉시컬 환경은 코드의 스코프와 그 스코프 내에서 선언된 변수나 함수 등의 식별자를 연결하는 데이터 구조이다.

0개의 댓글