Javascript
Javascript - 클로저(Closure)
개발따라김양
2022. 11. 25. 15:27
1. 클로저(Closure)란?
- 자바스크립트 고유의 개념이 아니라 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어(Functional Programming language: 얼랭(Erlnag), 스칼라(Scala), 하스켈(Haskell), 리스프(Lisp)…)에서 사용되는 중요한 특성이다.
- 함수형 프로그래밍
- 함수형 프로그래밍은 하나의 프로그래밍 패러다임으로 정의되는 일련의 코딩 접근 방식이며, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미
- 함수형 프로그래밍 언어로 설계된 클로저,스칼라,하스켈 등의 언어가 있고,
자바스크립트,코틀린,파이썬 등에도 최근 버전에 함수형 프로그래밍 문법이 추가 되었다.
- 함수형 프로그래밍
- 클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합
- "함수"란 반환된 내부함수를 의미하고
"그 함수가 선언될 때의 렉시컬 환경(Lexical environment)"란 내부 함수가 선언됐을 때의 스코프를 의미 - 클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여
자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수 - 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수
- "함수"란 반환된 내부함수를 의미하고
//외부함수
function outer () {
const x = 10;
//내부함수
return function (y){
return x + y;
}
}
const carryOuter = outer();
console.log(carryOuter(10));
- outer의 내부 익명함수의 렉시컬 스코프는 y와 스코프 체인으로 outer를 상위 스코프로 갖게 되어 x 변수에 접근 가능
- outer 는 내부 함수를 carryOuter에게 리턴 하고 Call Stack 에서 제거
- carryOuter() 를 실행
- 내부 익명함수는 렉시컬 스코프 환경을 유지하여 outer 함수에 선언된 x 에 접근 가능
2. 클로저의 활용
- 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억해야 하므로 메모리 차원에서 손해를 볼 수 있다.
- 모듈 패턴으로 데이터를 보호하고 캡슐화
- 함수형 프로그래밍에서 curring 패턴으로 사용
- 생성자가 한 개의 객체만을 생성하는 싱글톤 패턴에서 사용
- 특정 데이터를 스코프 안에 가두어 둔 채로 계속 사용할 수 있게하는 폐쇄성을 가짐
출처 : https://poiemaweb.com/js-closure
Closure | PoiemaWeb
클로저(closure)는 자바스크립트에서 중요한 개념 중 하나로 자바스크립트에 관심을 가지고 있다면 한번쯤은 들어보았을 내용이다. execution context에 대한 사전 지식이 있으면 이해하기 어렵지 않
poiemaweb.com
https://seungwoo321.github.io/blog/2021/07/31/what_closure_means.html
클로저(Closure)는 무엇이며, 어떻게/왜 사용하나요 ?
클로저를 이해 하기 위해서 Scope, Scope Chain, Context 에 대한 이해가 선행되어야 합니다.
seungwoo321.github.io