[node.js] Callback / Closure
1. Callback
함수에 전달되는 인자를 통해 또다른 함수를 호출하는 구조
- 비동기처리 관점에서
기존 return을 통해 구현하기 힘들었던 비동기처리 체계를 callback 구조를 통해 구현할 수 있다.
//넘겨받은 callback 함수구조를 선언한다.
function hello(var1, var2, hi){
const var1 = 1
const var2 = 2
hi(var1, var2)
}
//var1, var2 인자를 넘기는 callback 함수를 호출한다.
hello(1,2, (var1, var2)=>{
console.log(var1, var2)
})
2. Closure
쉽게 말하면 함수의 return이 또 다른 함수형태로 되어있는 구조이다.
Closure의 중요한 개념은 외부함수 및 내부함수이며,
외부함수 내부적으로 내부함수가 선언되어 내부함수가 외부함수에서 선언된 변수 등을 참조/접근할 수 있다는 것이다.
- 보통 return 값이 내부함수일때 외부함수의 변수에 접근할 수 있어 직관적으로 이해를 하기 위해선 위 개념을 기반으로 logic을 이해하면 좋을 것 같다.
- 이때 사용하는 내부함수를 Closure라 한다.
function outer() {
var x = 10;
var inner = function () { console.log(x); };
return inner;
}
var hiOuter = outer();
hiOuter(); // 10
위 logic에서 Clousre의 개념은 다음과 같다.
- outer() 외부함수 내부에 inner() 함수가 선언되었다.
- inner()함수는 자신이 선언된 공간(scope)인 outer() 함수 내 변수들을 접근 및 사용할 수 있다.
- inner() 함수에서 사용하는 변수는, 자신이 선언된 공간이 외부함수 내에 존재하여 execution context 에 적재되어 참조가 가능한 변수이다.
- inner()를 통해 outer()에 접근할 수 있고, 이를 Closure 함수라 한다.
outer()는 hiOuter에 내부 Clousre logic을 반환한 후 실행종료된 것처럼 보이지만(callstack에서 outer() 함수가 소멸되어 변수 x에 접근불가), 내부 Clousre 함수를 다시 한번 호출하여 변수 x를 참조할 수 있게 되었다.
2-1. 메모리 누수 관점에서의 Closure
이처럼 외부함수는 실행이 종료되었으나, 내부함수의 logic이 지속될 경우 외부함수에서 선언된 변수에 대해 지속적인 참조가 이루어진다.
이 과정에서 불필요한 변수가 참조되거나, 선언되었음에도 활용되지 않는 메모리 누수가 발생할 수 있기 때문에 이 점을 유의하면서 프로그래밍을 해야 한다.
3. 참조링크
https://poiemaweb.com/js-closure
Author And Source
이 문제에 관하여([node.js] Callback / Closure), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyrbs22/node.js-Closure저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)