클로저란? in Computer Programming

JS·2023년 2월 5일
0

Tech Reference

목록 보기
12/13
post-thumbnail

클로저(Closure)란?

객체의 속성중 하나인 범위(Scope)를 벗어난 다른 값이나 참조가 저장된 주소를 캡쳐하여 연결하는 포인터이다

예시를 통하여 의미를 확인해 보자

다음과 같이 구문을 작성했을때 본래 a는 선언된 대리자의 블록 범위 바깥에 있는 객체이기 때문에 사용할 수 없어야 하지만, 정상적으로 구문이 실행되고있는 것을 확인할 수 있다

어떻게 이러한 일이 가능한지, 디스어셈블리를 통하여 확인해보자

빨간색 박스 안은 int a의 주소 값이며, a로 찾아가니 0x0a(10진수 10)가 저장된 것을 확인할 수 있다

다음은 대리자 action이다. action으로 찾아가니 어떤 주소값이 저장되어있음을 확인할 수 있다
이 주소값을 따라가게 되면

처음 보았던 int a의 주소값인 0x000001DC9D8CAD88 근처의 주소가 나오는데, 이 주소를 따라가면

int a의 주소가 나오는 것을 확인할 수 있다. 이처럼, 캡쳐한다는 의미는 참조(주소값)를 가져온다는 의미이다

그렇다면, 클로저는 왜 동작할 수 있는걸까?

렉시컬 스코프(Lexical Scope)와 자유 변수(Free Variable)

함수의 범위로서, 함수의 스코프라고도 표현한다

함수의 범위는 함수의 코드 블록 뿐만 아니라 외부의 코드 블록까지이다. 그렇기 때문에 무명 함수에서 외부의 변수를 캡쳐해 사용할 수 있는 것이다. 외부의 변수를 가져올 경우, Local Variable도 Parameter도 아닌 함수에 사용되는 변수를 의미하는 뜻으로 Free Variable이라 표현한다

렉시컬 환경(Lexical Environment)이란?

함수 내부의 지역 변수를 가지고 있는 객체를 뜻하는 Environment Record와 정의된 함수 외부의 스코프인 Lexical Environment에 대한 참조를 의미한다

함수의 스코프는 렉시컬 스코프이기 때문에 클로저를 사용할 수 있는 것이다


Reference

profile
게임 프로그래머 지망생

0개의 댓글