JavaScript - 클로저(Closure)

김서영·2024년 2월 11일
0

클로저(Closure)


주변 상태에 대한 참조와 함께 묶인 함수의 조합

함수 안에 함수를 선언한 환경에서의 관계

  • 함수가 선언될 때의 외부 변수에 대한 참조를 유지하고, 함수가 나중에 실행될 때에도 그 변수에 접근 가능
    => 자바스크립트는 함수를 리턴하고 리턴되는함수가 클로저를 형성하기 때문

클로저는 반환된 내부함수가 자신이 선언되었을때의 환경(렉시컬 환경)에서의 스코프를 기억하기 때문에 접근이 가능

예시)

function outerFunction() {
    var outerVariable = 'I am outer';
    function innerFunction() {
        console.log(outerVariable);
    }
    return innerFunction;
}
var innerFunc = outerFunction();
innerFunc(); // 출력: I am outer
  • innerFunction은 자신이 정의된 스코프 외부의 변수에 접근 가능(외부 변수인 outerVariable에 접근 가능)
  • outerFunction은 innerFunction을 반환
  • 클로저는 함수가 선언된 위치의 렉시컬 스코프(Lexical Scope)에 대한 참조를 유지(함수가 호출될 때가 아니라, 함수가 정의될 때의 스코프를 기준)
  • 클로저는 외부 변수에 대한 참조를 유지하므로, 해당 변수의 값이 변경되면 클로저 내부에서도 해당 값이 변경됨

클로저를 사용하는 이유

  1. 정보 은닉과 데이터 보호
    클로저를 사용하여 함수의 스코프 내에서 private 변수와 함수를 생성
    외부에서 접근할 수 없는 데이터를 보호하고, 오직 특정 함수 내부에서만 접근 가능한 정보를 생성 가능
  2. 상태 유지
    상태를 유지하고 관리하는 데 유용
  3. 비동기 작업 처리
    콜백 함수를 사용하여 비동기 작업을 수행할 때 클로저를 활용하여 외부 변수의 상태를 유지하고 이를 처리 가능
profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글

관련 채용 정보