클로저란?

·2023년 3월 22일
0
post-thumbnail

클로저

내부 함수의 저장된 렉시컬 환경을 이용하여 외부에서 해당 함수의 지역 내부의 데이터를 참조하는 현상을 말한다. 함수 스코프에서 말했다시피 일반적으로 내부에서 외부 데이터에 접근하는 것은 가능하면서도, 외부에서 내부 데이터를 불러오는 것은 불가능하다. 그러나 클로저는 이를 완전히 대척하는 결과를 가져온다. 이유가 무엇일까?

function outer() {
	let outerVariable = 'THIS IS OUTER';
	const innerFunction = function () {
		console.log(outerVariable);
	}
	return innerFunction;
}

const temp = outer();
temp(); // 'THIS IS OUTER';

자바스크립트의 함수는 선언시 생성된 렉시컬 환경 정보를 계속 기억하고 있다. 즉 return innerFunction 일 경우 innerFunction 계속 outerVariable 에 대한 참조를 기억하고 있기 때문에 외부에서 호출했을 때 해당 참조값을 불러오는 것이 가능한 것이다.

어떤 경우 종종 사용되는 가?

초기에는 private 과 같이 일종의 접근 제한을 막기 위한 용도로 사용했다. 자바스크립트는 private 와 같은 접근 제한자가 없기 때문에, 이와 비슷한 용도로 사용하고자 클로저를 통해 private 을 사용했다. 현재의 경우는 typescript 를 통해 충분히 접근 제한을 구현하기 때문에 이를 위해 사용하는 경우는 드물 거라 예상한다.

이보다 훨씬 많이 사용하는 사례가 존재하는데 바로 상태변경 이다. 함수 내부에 상태값을 만들고, 이를 참조하거나 변환하는 함수들을 반환하여, 내부에서 직접적으로 상태를 변경하는 것은 불가능하기에 무분별한 업데이트를 방지하면서도, 반환된 함수를 호출하여 최산상태를 유지하는 것은 가능하도록 할 수 있다.

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글