클로저란?

규갓 God Gyu·2024년 11월 11일

면접질문

목록 보기
5/142

함수가 선언될 때의 스코프를 기억하여, 함수가 생성된 이후에도 그 스코프에 접근할 수 있는 기능

비유하자면, 함수가 자신이 생성된 환경을 '기억'하는 것
자바스크립트의 함수가 일급 객체라는 특성 + 렉시컬 스코프의 조합으로 만들어짐

function outerFunction(outerVariable){
	return function innerFunction(innerVariable){
    	console.log('Outer Variable: ' + outerVariable);
        console.log('Inner Variable: ' + innerVariable);
    }
}

const newwFunction = outerFunction('outside');
newFunction('inside');

여기서 innerFunction은 outerFunction의 내부에 정의, 즉 자신이 생성된 스코프, outerFunction의 스코프를 기억하고, outerFunction의 호출이 완료된 이후에도 그 스코프에 접근할 수 있음. 그리고 innerFunction은 outerVariable에도 접근할 수 있음.

언제 활용?

변수, 함수의 접근 범위 제어 + 특정 데이터와 상태를 유지하기 위해 활용

  1. 데이터 은닉
    외부에서 접근할 수 없는 비공개 변수와 함수 만들 수 있음.
    데이터를 은닉하여 외부 접근을 막고, 데이터 무결성을 유지함.
    ex- 특정 함수 내부에서만 접근 가능한 변수 생성, 이를 조작할 수 있는 함수만 외부로 노출하여 안전하게 데이터 관리
  2. 비동기 작업
    비동기 작업에서 이전의 실행 컨텍스트를 유지해야 할 때 유용. 콜백 함수가 비동기적으로 실행될 때 클로저 사용하면 함수 실행 시점의 변수 참조할 수 있음.
function createLogger(name){
	return function() {
    	consol.log(`Logger: ${name}`);
    };
}

const logger = createLogger('MyApp');
setTimeout(logger, 1000); // 1초 후 'Logger: MyApp'출력

name변수를 저장하여 1초 후에도 해당 값이 유지되어 출력

  1. 모듈 패턴 구현
    모듈 패턴은 특정 기능을 캡슐화, 외부에 공개하고자 하는 부분만 선택적 노출하여 코드의 응집력을 높이고, 유지보수성을 향상시키는 패턴, 필요한 함수와 데이터만 외부로 노출함으로써 모듈 패턴을 쉽게 구현할 수 있음.
profile
웹 개발자 되고 시포용

0개의 댓글