클로저 사용하는 개념 정리해보자 (스테픈 2km완료)

in sct-kr •  3 months ago 

클로저 개념정리 해보려고 한다.

프론트엔드 면접 질문으로 자주 등장하는 클로저

해당 개념을 좀 정리하는게 좋을것 같아 오늘은 이걸 정리해본다.

클로저(Closure)는 프로그래밍 언어에서 함수와 그 함수가 선언될 때의

렉시컬 환경(lexical environment)을 함께 저장한 개념을 말하는데

image.png

일단 참고를 위해서 함수를 이렇게 선언하고 실행시켜봤습니다

어떤식으로 흐름이 흘러가는지 보기위해

image.png

디버그 모드로 확인을 해봤다.

처음에는 클로저 부분에 아무값도 없지만

위 코드에서 외부함수가 호출되면, 외부변수가 정의된 환경이 생성되고

외부함수는 내부함수를 반환한다.

이 때 내부함수는 외부변수를 참조하는 클로저가 된다.

image.png

image.png

나의함수를 호출하면, 내부함수가 실행되고

이 함수는 자신이 정의될 때의 렉시컬 환경을 참조하여 외부변수에 접근할 수 있다

위 사진을 보면 클로저에 외부 변수값이 들어오는걸 확인 할 수 있다.

즉, 렉시컬 환경은 함수가 어디서 정의되었는지에 따라 결정되는 변수와 그 변수의 범위로,
함수가 호출될 때 어떤 변수에 접근할 수 있는지를 결정한다.
클로저는 이 렉시컬 환경을 기억하여 함수가 호출될 때 필요한 변수를 참조할 수 있게 한다

클로저의 주요 특징을 정리하자면

  • 함수와 환경의 결합:
    클로저는 함수와 그 함수가 정의될 때의 렉시컬 환경
    (즉, 함수가 정의된 시점에서의 변수들을 포함)을 함께 저장한다.

  • 변수 은닉:
    클로저를 사용하면 함수 외부에서 접근할 수 없는 비공개 변수를 만들 수 있다.
    이는 정보 은닉(information hiding)이 가능하다.

  • 상태 유지:
    클로저는 함수가 종료된 후에도 그 함수가 선언된 스코프 내의 변수들을 기억하여 상태를 유지할 수 있다.

상태유지를 확인해보기 위해 카운터를 만들어서 확인해봤습니다.

image.png

image.png

함수 내부의 변수값이 저장되어 사용되는걸 볼 수 있습니다.

image.png

이런식으로 코드를 짜서 테스트 해봤습니다.

외부에서 접근이 불가능하니 은닉이 되는 모습입니다.

렉시컬 환경은 함수가 정의될 때 결정되고,
실행 컨텍스트(execution context)가 생성될 때마다 렉시컬 환경이 함께 생성되서.
이를 통해 함수는 자신이 정의된 위치에 따라 어떤 변수에 접근할 수 있는지 결정된다는점.


스테픈2km완료

image.png

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!