본문 바로가기

전지적라온시점

JavaScript 클로저(Closure) 완벽 이해 본문

Development/Javascript

JavaScript 클로저(Closure) 완벽 이해

최라온 2025. 5. 12. 19:45
728x90
반응형
SMALL

JavaScript 클로저(Closure) 완벽 이해

JavaScript에서 클로저(Closure)는 중요한 개념 중 하나입니다. 클로저는 함수와 그 함수가 선언된 렉시컬 환경이 결합된 객체입니다. 이는 함수가 선언된 시점에서의 변수를 기억하고, 그 변수를 나중에 참조할 수 있도록 만들어 줍니다.

클로저란?

클로저는 함수와 그 함수가 선언된 환경(변수)에 대한 참조를 함께 가진 함수입니다. 이는 함수 내에서 선언된 변수에 접근할 수 있도록 해 줍니다.

클로저 예시

function outer() {
    let counter = 0; // outer 함수의 지역 변수
    return function inner() {
        counter++;
        console.log(counter); // inner 함수는 outer 함수의 지역 변수에 접근 가능
    };
}

const closure = outer(); // outer 함수 실행
closure(); // 1
closure(); // 2
closure(); // 3
        

위 예제에서 inner() 함수는 outer() 함수의 counter 변수에 접근할 수 있습니다. 이처럼 클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있게 합니다.

클로저 활용 예시

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

const counter = makeCounter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
console.log(counter.decrement()); // 1
        

makeCounter 함수는 클로저를 이용해 카운터 값을 기억하고 있으며, 외부에서는 incrementdecrement 메서드를 통해 카운트를 변경할 수 있습니다.

클로저의 장점

  • 상태를 유지하는 함수 만들기
  • 정보 은닉(Encapsulation) 가능
  • 콜백 함수에서 상태를 기억할 수 있음

클로저의 단점

  • 메모리 누수 가능성
  • 과도한 사용 시 코드 복잡도 증가

클로저와 관련된 중요한 개념

- 렉시컬 스코프(Lexical Scope): 변수의 스코프를 함수가 정의된 위치에 따라 결정하는 규칙

- 함수형 프로그래밍(Function Programming): 함수가 1급 객체로 취급되며, 클로저와 밀접하게 연결됨

728x90
반응형
LIST