개발.코딩

클로저(closure) 뜻

스마트스타일 2021. 6. 10. 15:53
반응형

체감상 클로저 함수라는 것은 자주 언급되지는 않았었다. 그래서 블로그를 써야하나 말아야 하나 고민했는데, 생각해보면 한번씩 클로저라는게 언급될때마다 그게뭐지? 하면서 클로저가 언급되고 전후로 5분씩은 맥락이해가 안되기 일쑤 였던 것 같다. 클로저가 없어도 나름 맥락을 짚고 넘어갔다고 생각하며 자기합리화를 하였었던것 같다. 클로저를 모르는사람이 클로저가 맥락상 중요했는지, 중요하지 않았었는지 판단하는것 자체가 개오바도 이런 오바가 없다는것을 알고 짚고넘어가기로 했다.

 

역시 다시 짚고 넘어가려고 찾아보니, 클로저라는 말자체가 생소하기에 단어의 뜻부터 알고 넘어간다.

 

클로저(closure):폐쇄, 종지,폐점,종결 

 

단어의 흐름을 느껴보니 대략 폐쇄, 종료등 무엇인가 폐쇄적이거나 끝남을 의미하는 것 같다. 그냥 '종료되고 끝나거나, 폐쇄되어 접근할 수 없다면 자바스크립트에서 사용되지 않았겠지' 라고 생각해서 접근해보자면 이미 끝나서, 폐쇄되었는데도 어딘가에 접근하거나 재사용하고싶은 맥락에서 클로저라는 이름을 붙인것 같다.

 

function outer(){
  const name = '나는네임';
  console.log(name)
}
outer()  //나는네임
console.log(name) //undefined

outer라는 함수를 선언하고, 이 함수안에서 name변수를 선언하였다.

이 함수의 외부에서 outer()함수를 호출하였고, 콘솔은 name에 담겨있는 나는네임을 정상적으로 찍어낼 수 있었다. 그러나 함수 밖에서 outer안에서 선언한 name을 사용하려고 콘솔로 찍어 보니 undefined라고 나오며 접근할 수 없다.

let a = 0;
function outer() {
  const name = "나는네임";

  return function inner() {
    a = name;
  };
}
let outer2 = outer();
outer2();
console.log(a); //나는네임

그래서 위와 같이 내부함수를 선언하고, 호출함으로써 내부 변수에 접근할 수 있음을 알게되었다.

호출하지 않고 콘솔을 찍을경우 a=0이 찍히게 된다.

let a = 0;
function outer() {
  const name = "나는네임";

  return function inner() {
    a = name;
  };
}

console.log(a); // 0

 

 

이외에 더 어려운 내용들이 많았지만 다이해 할 수 없었다. 위에서 다룬내용이 단순히 함수 호출에 따라 결과가 변한것일 뿐인지 클로저에 대한 내용을 제대로 다룬것인지 아직 알쏭달쏭하지만 내부함수가 외부함수의 지역변수에 접근하여 사용할 수 있다는 맥락에서 클로저라고 생각하고 있다.

반응형