02. 데브코스-생성형 ai 백엔드코스 6일차

2025. 4. 10. 17:42데브코스

javascript에 대해 공부하던 도중 클로저 개념이 나왔다.

 

예제는 다음과 같았는데

// counter 함수 정의
function counter() {
    // 지역 변수 count를 0으로 초기화 (counter 함수 안에서만 접근 가능)
    var count = 0;

    // 내부 함수(익명 함수)를 반환
    // 이 함수는 count 변수에 접근할 수 있음 (클로저의 핵심)
    return function() {
        count++;         // count 값을 1 증가시키고
        return count;    // 증가된 값을 반환
    }
}

// counter 함수 호출 → 내부 함수를 반환받아 count 변수에 할당
var count = counter();

// count()를 호출할 때마다 내부 함수 실행 → count 값을 1씩 증가
console.log(count()); // 1
console.log(count()); // 2
console.log(count()); // 3

 

당연히 결과값이 1,1,1 이 출력될거라 예상했던 것과 다르게 1,2,3이 출력되었다.

 

이유가 궁금했다. 왜 그럴까? 핵심은 함수가 선언될 때의 환경을 기억하고 있다는 점이었다.

 

클로저는 함수가 선언될 때의 렉시컬 환경(Lexical Environment)을 기억하고 있다가, 함수가 외부에서 호출되더라도 그 환경(스코프)에 접근할 수 있는 기능 이라고 한다.

 

 

쉽게 말하면,

  • 외부 함수 실행이 끝났더라도, 내부 함수가 외부 함수의 변수를 계속 기억하고 사용할 수 있는 상태!

인 것이다.

 

렉시컬 환경이란, 변수나 함수가 어디에서 선언되었는지를 기준으로, 그 범위(스코프)를 기억하는 구조

 

새로운 개념에 대해 알게되어 뿌듯한 하루였다. :)