클로저(Closure)란?
어떤 함수의 내부 함수가 외부 함수의 변수(*프리 변수)를 참조할 때, 외부 함수가 종료된 후에도 내부 함수가 외부 함수의 변수를 참조할 수 있도록 어딘가에 저장하는 함수를 의미(프리 변수(free variable)는 어떤 함수에서 사용되지만 그 함수 내부에서 선언되지 않은 변수를 의미), 또는 자신을 둘러싼 스코프(네임스페이스)의 상태 값을 기억하는 함수
##### | 참고 | 네임스페이스: 내부 식별자(형식, 함수, 변수 등의 이름)를 구분할 수 있는 범위. global , nonlocal , local |
클로저 함수 충족 조건
- 어떤 함수의 내부 함수일 것
- 그 내부 함수가 외부 함수의 변수를 참조할 것
- 외부 함수가 내부 함수를 리턴할 것
클로저의 특징
클로저 함수가 자신을 둘러싼 스코프의 상태 값을 기억하므로,중첩된 내부함수가 외부 함수의 변수를 참조하기에, 두 함수의 환경을 저장하는 클로저가 생성된다.
클로저의 장단점
### 장점
- 외부 함수가 삭제되어도 내부함수(클로저)에서는 외부 함수 범위에 있는 변수에 접근이 가능
- 전역 변수 남용을 방지할 수 있음
### 단점
- 클로저가 실행될 때마다 각자의 스코프를 유지해야 하기 때문에 메모리가 상대적으로 많이 사용됨