자바스크립트 - 클로저

_dodo_hee·2023년 12월 4일
0

JAVASCRIPT

목록 보기
17/17

클로저에 대해서 아나요? 🔥🔥
클로저를 사용하면 뭐가 좋죠? 🔥
클로저를 어떻게 생성하나요? 🔥

클로저

함수가 속한 렉시컬 스코프(Lexical Environment)를 기억하여, 함수가 렉시컬 스코프 밖에서 실행될 때도 이 스코프에 접근할 수 있게 해주는 기능.

쉽게 설명하면, 클로저는 "폐쇄,갇히다" 라는 뜻으로 사용되고 있는데, 자바스크립트에서는 함수가 선언될(생성될) 그 당시에 주변의 환경과 함께 갇히는 것을 말한다.

또 다르게 설명하면, 내부함수는 외부함수의 지역변수에 접근할 수 있는데,
외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근할 수 있는 것이다.

렉시컬 스코프

함수가 선언이 되는 위치에 따라서 상위 스코프가 결정되는 스코프입니다. 함수가 선언이 될 때, 스코프가 생성된다.

외부 함수의 변수를 참조하는 내부 함수

const outer = () => {
  let a = 1;
  const inner = () => {
    console.log(++a); //2
  };
  inner();
};
outer();

inner 함수 내부에서는 a를 선언하지 않았기 때문에 환경레코드에서 값을 찾지 못해서 외부 환경 참조에 지정된 상위 컨텍스트인 outer의 렉시컬환경에 접근해서 다시 a를 찾는다.

outer의 함수의 실행컨텍스트가 종료되면 렉시컬 환경에 저장된 식별자들(a, inner)에 대한 참조를 지운다.

주소에 저장되어있던 값들은 자신을 참조하는 변수가 하나도 없게 되서 가비지 컬렉터의 수집 대상이 된다.

클로저를 사용하는 이유

데이터를 보존할 수 있다.

클로저 함수는 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용할 수 있다.
클로저는 이처럼 특정 데이터를 스코프 안에 가두어 둔 채로 계속 사용할 수 있게하는 폐쇄성을 갖는다.

정보의 접근 제한 (캡슐화)

‘클로저 모듈 패턴’을 사용해 객체에 담아 여러 개의 함수를 리턴하도록 만든다.
이러한 정보의 접근을 제한하는 것을 캡슐화라고 한다.

모듈화에 유리하다.

클로저 함수를 각각의 변수에 할당하면 각자 독립적으로 값을 사용하고 보존할 수 있다.
이와 같이 함수의 재사용성을 극대화 함수 하나를 독립적인 부품의 형태로 분리하는 것을 모듈화라고한다.
클로저를 통해 데이터와 메소드를 묶어다닐 수 있기에 클로저는 모듈화에 유리하다.

클로저 생성하는 방법

함수가 생성될때마다 생성된다.

profile
무럭무럭 자라나는 도도 개발성장일기

0개의 댓글