주니어에서 시니어로
클로저(Closure)란? 본문
클로저 (Closure)
함수와 함수가 선언된 어휘적 환경의 조합이다. 여기서 함수란 반환된 내부 함수를 의미하고,
그 함수가 선언될 때의 렉시컬 환경(Lexical environment)란 내부 함수가 선언되었을 때의 스코프를 의미한다.
즉, 클로저는 반환된 내부함수가 자신이 선언했을 때의 환경(렉시컬 환경)인 스코프를 기억하여 자신이 선언되었을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수를 말한다.더 간단히 말하면 자신이 선언될 당시의 환경을 기억하는 함수라고 말할 수 있겠다.
ex)
함수 outerFunc 내에서 내부함수 innerFunc가 선언되고 호출되었다. 이 때 내부함수 innerFunc는 자신을 포함하고 있는 외부함수 outerFunc의 변수x에 접근할 수 있다. innerFunc가 outerFunc의 내부에 선언되었기 때문이다.
클로저에 의해 참조되는 외부함수의 변수 즉 outerFunc 함수의 변수x를 자유변수(Free variable)라고 부른다.
클로저라는 이름은 자유변수에 함수가 닫혀있다(closed)라는 의미로 자유변수에 엮여있는 함수라는 뜻이다.
실행 컨택스트의 관점에 설명하면 내부함수가 유효한 상태에서 외부함수가 종료하여 외부함수의 실행 컨택스트가 반환되어도, 외부함수 실행 컨택스트 내의 활성 객체(Activation object)(변수, 함수 선언 정보 등을 가지고 있다)는 내부함수에 의해 참조되는 한 유효하여 내부함수가 스코프 체인을 통해 참조할 수 있는 것을 의미한다.
즉 외부함수가 이미 반환되었어도 외부함수 내 변수는 이를 필요로 하는 내부함수가 하나 이상 존재하는 경우 계속 유지된다. 이 때 내부함수가 외부함수에 있는 변수의 복사본이 아니라 실제 변수에 접근한다는 것에 주의하여야 한다.
장점
1. 데이터를 보존할 수 있다
클로저는 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용할 수 있다.
클로저는 이처럼 특정 데이터를 스코프 안에 가두어 둔 채로 계속 사용할 수 있게 하는 폐쇄성을 갖는다.
2. 정보의 접근 제한 (캡슐화)
클로저 모듈 패턴을 사용해 객체에 담아 여러 개의 함수를 리턴하도록 만든다.
이러한 정보의 접근을 제한하는 것을 캡슐화라고 한다.
3. 모듈화에 유리하다
클로저 함수를 각각 변수에 할당하면 각자 독립적으로 값을 사용하고 보존할 수 있다.
함수의 재사용성을 극대화 함수 하나를 독립적인 부품의 형태로 분리하는 것을 모듈화라고 한다.
클로저를 통해 데이터와 메소드를 묶어다닐 수 있기에 클로즈는 모듈화에 유리하다.
reference
https://poiemaweb.com/js-closure
https://velog.io/@wngud4950/%ED%81%B4%EB%A1%9C%EC%A0%80Closure%EB%9E%80
'STUDY > Frontend' 카테고리의 다른 글
[Git] 실수로 main 브랜치 만들었을 때 (0) | 2023.06.01 |
---|---|
실행 컨텍스트란? (0) | 2023.04.06 |
모듈이란? 모듈화란? (0) | 2023.04.05 |
REST란? RESTful API란? (0) | 2023.04.03 |
Session vs Token(JWT) (0) | 2023.03.31 |