[JS] - 클로저 (closure)

🍉effy·2022년 4월 4일
0
post-thumbnail

클로저 (closure) ?

🌟 내부 함수가 외부 함수의 컨텍스트에 접근할 수 있는 것을 가리킨다

  • 클로저는 특정 상황에서 발생하는 환경이고 함수는 이 현상이 나타나기 위한 조건에 해당한다
  • 함수 내에서 함수를 선언하고 사용하는 것.

📌 클로저를 이해하기 위해서는 자바스크립트가 어떻게 변수의 유효범위를 지정하는지 (Lexical Scoping) 을 먼저 이해해야 한다.

function hello(name) {
  let _name = name; // 변수명 앞에 underscore(_)를 포함하면 private val임을 의미
  return function () {
    // 클로저 함수
    console.log('Hello, ' + _name);
  };
}

let hello1 = hello('혜린');
hello1(); // output = Hello, 혜린
  • hello() 가 외부 함수, 리턴한 무명함수는 그 안에 중첩된 내부 함수이다. 무명함수는 클로저이다.
  • 내부 함수는 외부 함수의 지역변수 _name 을 참조할 수 있다.
  • 외부 함수의 실행이 끝난 후에도 내부 함수가 외부 함수의 변수에 접근할 수 있다.

클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical Scope) 를 기억하여 자신이 선언됐을 때의 환경밖에서 호출되어도 그 환경(스코프)에 접근할 수 있다.



클로저와 일반 함수의 차이점 ?

  • 일반 함수는 선언할 때 마다 내부 함수의 변수가 초기화된다.
  • 클로저 를 사용할 때는 내부의 클로저가 외부 함수의 변수 값을 기억하고 있다.


클로저를 왜 사용하는가 ?

1️⃣ 정보를 은닉하기 위해. 특정 함수에게만 상태 변경 허용하기 위해 사용한다.

  • 내부 모듈에서만 사용.

2️⃣ 캡슐화 - 객체의 상태를 나타내는 프로퍼티와 프로퍼티를 참조하고 조작하는 메서드를 하나로 묶는 것
3️⃣ 전역 변수의 사용 억제 (자신이 생성되었을 때의 lexical 환경을 기억하기 때문)
4️⃣ 현재 상태를 기억하고 변경된 최신 상태를 유지하기 위해

일반 함수의 경우 사용하면 소멸되지만, 클로저를 사용하면 소멸되어야 할 객체들이 메모리상에 남아있기 때문에 클로저를 남발하기보다는 필요한 곳에만 사용해야 한다.

profile
Je vais l'essayer

0개의 댓글