본문 바로가기

Javascript

Closure란??

클로저란 내부함수가 외부함수의 맥락에 접근할 수 있는 것을 말한다. 말로 설명하기보단 예시를 살펴보자.

 

function getClosure() {
  var text = 'variable 1';
  return function() {
    return text;
  };
}

var closure = getClosure();
console.log(closure()); // 'variable 1'

 

 위에서 정의한 getClosure()는 함수를 반환하고, 반환된 함수는 getClosure() 내부에서 선언된 변수를 참조하고 있다. 또한 이렇게 참조된 변수는 함수 실행이 끝났다고 해서 사라지지 않았고, 여전히 제대로 된 값을 반환하고 있는 걸 알 수 있다.

이와 같이 내부 함수가 외부함수에서 선언된 변수에 접근하여 사용할 수 있는 것을 클로저라고 한다.


 이러한 클로저 방식으로 정보를 은닉화 할 수도 있다. 만약 처음에 선언한 변수를 변경시키지 않고 들어오는 변수만 변경시키고 싶다면 외부함수에 변수를 지정해 놓고 은닉해놓은 뒤 내부 함수에 변수를 변형시키면 된다. 클로저의 함수들을 살펴보면 내부 함수는 외부 함수의 변수를 참조만 할 뿐이지 실제로 변수의 값을 저장해놓지는 않는다. 그렇기 때문에 외부함수의 변수가 변경되었을 때 클로저는 더욱 흥미로워지고, 이러한 기능은 더욱 창의적인 방법으로 활용할 수도 있다. 

 클로저를 전체적으로 정리해보자면 다음과 같다.(위에는 간단한 예제만 나와있는 상태)

 - 객체의 메소드에서도 사용할 수 있다.

 - 동일한 외부함수 안에서 만들어진 내부함수나 메소드는 외부함수의 지역변수를 공유한다.

 - Private 속성은 객체의 외부에서는 접근 할 수 없는 외부에 감춰진 속성이나 메소드를 의미한다. 이를 통해서 객체의 내부에서만 사용해야 하는 값이 노출됨으로서 생길 수 있는 오류를 줄일 수 있다. 

'Javascript' 카테고리의 다른 글

This  (0) 2020.02.05
Javascript(Prototype)  (0) 2020.02.05