자바스크립트 클로저: 기능적 프로그래밍에서의 역할과 작동 방식
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
자바스크립트를 사용하는 중급~고급 개발자, 기능적 프로그래밍 학습자
핵심 요약
- 클로저(Closure)는 함수와 그 함수가 정의된 범위의 변수를 함께 묶은 객체로, 함수 외부에서 내부 변수에 접근 가능
- 렉시컬 스코핑(Lexical Scoping)을 기반으로 함수 실행 후에도 외부 변수 참조 유지
- 기능적 프로그래밍(Functional Programming)에서 데이터 캡슐화, 모듈 패턴, 함수 공장(Function Factory) 구현에 핵심 역할
섹션별 세부 요약
1. 클로저의 정의와 생성
- 클로저는 함수와 해당 함수의 실행 환경(Lexical Environment)을 묶은 객체
- 함수 내부에서 외부 변수를 참조하면 클로저 생성
- 예제:
```javascript
function outer() {
let count = 0;
return function inner() {
count++;
console.log(count);
};
}
const increment = outer();
increment(); // 1
```
- count 변수는 outer 함수가 종료된 후도 inner 함수 내에서 접근 가능
2. 클로저의 활용 사례
- 데이터 캡슐화: 외부에서 직접 접근 불가능한 프라이빗 변수 생성
- 모듈 패턴:
```javascript
const Module = (function() {
let privateVar = 0;
return {
getVar: function() { return privateVar; },
setVar: function(val) { privateVar = val; }
};
})();
```
- 함수 공장(Function Factory): 동일한 로직을 가진 함수를 다른 인자로 생성
```javascript
function createMultiplier(multiplier) {
return function(number) { return number * multiplier; };
}
const double = createMultiplier(2);
console.log(double(5)); // 10
```
3. 클로저의 주의점
- 메모리 누수(Memory Leak): 불필요한 클로저 생성 시 메모리 누수 발생 가능성
- 렉시컬 환경 유지: 중첩 함수가 실행 중인 동안 외부 변수 참조
- ES6+에서는 let/const 사용 시 블록 스코프를 기반으로 클로저 생성
결론
- 클로저는 데이터 캡슐화와 모듈 패턴 구현에 필수적
- 함수 공장(Function Factory)을 활용해 재사용 가능한 함수 생성
- 메모리 누수 방지를 위해 사용 후 불필요한 클로저를 명시적으로 제거
- ES6+에서는 let/const 사용으로 블록 스코프를 통해 클로저의 범위를 제어 가능