Language | Basic/JavaScript

[JavaScript 스터디] 클로저

주정용 2021. 2. 1. 14:43
728x90
  • 함수와 그 함수가 선언된 렉시컬 환경의 조합
  • 자바스크립트 고유의 개념이 아님

렉시컬 스코프

  • 함수를 정의한 위치에 기반한 스코프
  • 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에서 정의된 위치에 따라 결정됨

[[Environment]]

  • 함수는 내부 슬롯 [[Environment]]에 상위 스코프의 참조(정의된 환경)를 저장함
  • 따라서 자신의 상위 스코프를 [[Environment]]를 통해서 확인함
  • 함수 렉시컬 환경의 외부 렉시컬 환경에 대한 참조에 함수 객체의 [[Environment]]에 저장된 참조값이 할당됨

클로저와 렉시컬 환경

  • 클로저
    • 외부 함수보다 중첩 함수가 오래 유지되는 경우, 중첩 함수는 생명주기가 종료된 외부 함수의 변수를 참조할 수 있음
    • 중첩 함수가 상위 스코프의 식별자를 참조 + 중첩 함수가 외부 함수보다 오래 유지되는 경우
    • 이러한 중첩 함수 --> 클로저
  • 외부 함수의 실행 컨텍스트는 컨텍스트 스택에서 pop되지만, 렉시컬 환경은 중첩함수에 의해서 참조되기 때문에 유지됨 --> GC 대상 X
  • 클로저에 의해 참조되는 상위 스코프의 식별자 --> 자유 변수
  • 필요할 때에 적극적으로 사용

클로저 활용

  • 클로저는 상태를 안전하게 변경, 유지하기 위해 사용
  • 상태를 은닉하고 특정 함수에게만 상태 변경 허용 --> 상태를 안전하게 관리

캡슐화, 정보 은닉

  • 캡슐화
    • 프로퍼티와 메서드를 하나로 묶는 것
  • 정보 은닉
    • 외부에 비공개 처리 --> 객체 상태 변경 방지 + 결합도를 낮춤
  • 자바스크립트는 정보 은닉을 완전하게 지원하지 않음 --> 그래서 private 제안이 나타남

학습 도서

  • '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스

[http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&linkClass=3314&barcode=9791158392239]