Post

클로저(Closure)란?

클로저(Closure)란?

면접fe

클로저(Closure)란?

클로저(Closure)는 함수가 자신이 선언될 때의 실행 컨텍스트의 스코프를 기억하는 기능이다.
따라서, 함수가 스코프 밖에서 실행될 때도 그 스코프에 접근할 수 있다.
관련 용어를 자세히 알아보자.



렉시컬 스코프(Lexical Scope)

스코프는 변수에 접근할 수 있는 유효한 범위를 말하는데,
여기서 렉시컬 스코프는 코드 위치에 따라 하나의 실행 컨텍스트에서 유효한 범위를 지칭한다.

이 때, 이 범위는 어디서 호출한 것이 아니라,
어디서 선언(작성)했는지에 따라 결정된다.



가비지 컬렉터(GarbageCollector)

가비지 컬렉터는 가비지 컬렉션이라는 과정을 담당한다.
가비지 컬렉션은 메모리에 할당된 값이 필요없을 때, 메모리를 해제시키는 과정을 말하며.
이 때, 필요없다는 기준은 root에서 닿을 수 있는 객체들이 아닌 경우가 된다.



클로저 예시

다음과 같은 코드가 클로저에서 사용되는 예시이다.
해당 특징으로 인해, 함수가 반환되어 종료되어도 해당 변수를 계속 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
function makeCounter() {
  let count = 0;
  return function () {
    count += 1;
    return count;
  }
}

var func = makeCounter();
func(); 

해당 코드를 확인해보면, GarbageCollectormakeCounter()의 참조를 없앨 것으로 예상되나,
내부 함수가 해당 스코프의 변수인 count를 참조하고 있어서 없어지지 않는다.

따라서 스코프 외부에서 내부 함수가 실행되도 해당 스코프를 기억하므로,
해당 변수를 계속 사용 가능한 것이다.

Image

Image

따라서, 자바스크립트에는 없는 캡슐화라는 개념을 구현할 수 있고
정보 은닉캡슐화의 이점을 활용할 수 있다.



✨ 출처

blog, 프론트엔드 면접 문제 은행


This post is licensed under CC BY 4.0 by the author.