반응형

 

클로저(Closure)란?

    “클로저는 함수가 외부의 변수에 접근할 수 있는 기능”이다.

     즉, 내부 함수가 외부 함수의 변수에 접근하고 기억하는 것이 클로저이다.


예제 코드로 살펴보기 🔍
function outer() {
    let count = 0; // 외부 함수의 지역 변수

    return function inner() {
        count++;
        console.log(`현재 count는 ${count}입니다.`);
    };
}

const counter = outer(); // outer는 실행되고, inner가 반환됨
counter(); // 현재 count는 1입니다.
counter(); // 현재 count는 2입니다.

 

겉으로만 봤을 때는 counter를 실행하면 count가 각각 1, 1로 출력될 것 같지만 실제로는 아니다.

outer() 함수는 실행되고 사라졌지만,그 안에서 만든 inner() 함수는 count를 기억하고 있다.

왜냐하면 count가 클로저에 포함되어서 메모리에 살아있기 때문이다.


클로저의 핵심 구성
구성 요소 설명
외부 함수 (outer) 지역 변수를 선언하는 함수
내부 함수 (inner) 외부 함수의 지역 변수에 접근하는 함수
반환 내부 함수가 외부로 반환되어 사용됨
기억 외부 함수의 지역 변수를 내부 함수가 기억 (→ 클로저)

그렇다면 클로저를 왜 쓰는걸까?

 

    1. 데이터 보호 / 은닉 (캡슐화): 외부에서 직접 접근 못하게 하고, 함수로만 조작하도록 할 수 있음.

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

const counter = createCounter();
counter.increment(); // 1
counter.decrement(); // 0
// count에 직접 접근은 불가능

 

    2. 상태 유지:  클로저를 사용하면 상태를 기억하게 할 수 있음.

    3. 콜백, 이벤트 핸들러:  비동기 처리에서도 클로저가 유용하게 쓰임.

 

 

[주의할 점]
1) 메모리 누수: 클로저로 인해 변수가 해제되지 않고 남아있으면 메모리 낭비가 발생할 수 있다.
2) 남용 주의: 모든 함수에 클로저를 만들 필요는 없고, 필요한 상황에서만 쓰는 게 좋다.

 

요약

 

    1) 클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있게 해주는 기능

    2) 함수가 자신이 만들어질 때의 환경을 기억

    3) 상태 유지, 캡슐화, 비동기 처리 등에 매우 유용

    4) 하지만 메모리 관리에는 주의해야 함

 

반응형

+ Recent posts