1. 콜백함수
Node.js의 가장 핵심적인 부분 - 콜백함수 (비동기 방식의 함수, Non-Block)
왜 중요한가?
콜백인 함수에서 콜백을 사용하지 않게 된다면, 콜백 함수의 과정이 끝나기 전에 다음 프로세스를 진행하게 되는 경우가 있다. (ex. db에서 값을 읽어들일 때 값을 읽기 전에 출력을 해버리는 경우)
내용이 복잡해질수록 여러개의 callback이 계속된다.
- 함수를 호출했을 때 또 다른 함수를 파라미터로 전달
- 함수안에 콜백함수가 들어가있는 상태
function add(a,b,callback) {
var result = a + b;
callback(result);
}
add(10,20,function(result) {
console.log("더하기 결과: " + result);
});
더하기 결과: 30
// 함수가 결과값으로 리턴되는 형태
function add(a,b,callback) {
var result = a + b;
callback(result);
var history = function() {
return a + "+" + b + "=" + result;
};
return history;
}
//function(result) = callback함수인것
var history = add (10,20,function(result){
console.log("더하기 결과: " + result);
});
console.log("결과값으로 받은 함수 실행 결과: "
+ history());
더하기 결과: 30
결과값으로 받은 함수 실행 결과: 10+20=30
★ 2. 클로저 (Closure)
클로저: 리턴된 함수에서 자신을 만들어준 함수 내의 변수에 접근하는 것
함수 안에서 새로운 함수를 만들어서 변환하는 경우에는 예외적으로 변수 접근을 허용한다
function add(a,b,callback){
var result = a + b;
callback(result);
var count = 0; // history 실행 횟수
var history = function() {
count ++;
return count + ":" + a + "+"
+ b + "=" + result;
};
return history;
}
var history = add(10,20,function(result){
console.log("더하기 결과:" + result);
})
// 자신을 만들어준 함수 내의 변수에 접근하기
console.log("결과값:" + history());
console.log("결과값:" + history());
console.log("결과값:" + history());
어떤 언어도 이미 지나온 for문(반복문)을 다시 접근할 수 없다. 다시 접근하고 싶으면 function add() 자체를 실행해야 한다
하지만 Closure를 이용하면 var history (함수안의 함수)를 실행하여 반복문을 다시 쓸 수 있는 것이다
다시 말해,
history 함수가 호출될 때는 add 함수를 다시 접근할 수 없다. (내부에서 외부를 다시 호출할 수 없다)
add 함수 안에 만들어진 count 변수도 접근이 불가능하다. (내부에서 외부 변수를 접근할 수 없다)
단, 함수 안에서 함수를 만들어 변환하는 경우에는 접근을 허용하는 것이다 (Closure)
Closure 조건
1. 함수 안에 함수를 만들고
2. 그 변수가 계속 값을 바뀌게 할 때 (count++) access할 수 있는 것
'Node' 카테고리의 다른 글
Node.js - 이벤트처리, 파일다루기, 버퍼객체 (0) | 2019.11.01 |
---|---|
Node.js - express 모듈을 이용한 서버 구축 (0) | 2019.10.31 |
Node.js - 배열 (0) | 2019.10.31 |
Node.js - 내장 모듈(os,path,url), 객체와 함수 (0) | 2019.10.30 |
Node.js 기본 - 전역객체 (console, process, exports) (0) | 2019.10.29 |