Joon's Space
[NodeJS] 동기(Synchronous), 비동기(Asynchronous), 콜백(Callback) 개념 [생활코딩] 본문
[NodeJS] 동기(Synchronous), 비동기(Asynchronous), 콜백(Callback) 개념 [생활코딩]
Happy Joon 2021. 5. 28. 21:28동기적 처리(Synchronous)
- 내가 평소에 코딩했던 코드들이 컴파일하였을 때, 위에서 부터 순서대로 진행되는 것을 동기적 처리라고 한다.
var fs = require('fs'); // fs라는 모듈을 사용함
//readFileSync
console.log('A');
var result = fs.readFileSync('syntax/sample.txt', 'utf8'); // 변수 result는 return 값을 받음
console.log(result);
console.log('C');
readFile 함수의 동기식 처리방법이다. 보통 nodejs에서는 비동기식 처리방식을 더 선호하기 때문에, 동기식 처리방식의 readFile 동기식 처리 함수는 따로 Sync가 붙는다. (sameple.txt 에는 'B' 라는 텍스트가 저장되어 있음)
위 코드를 실행 시켰을 때, 콘솔 창에는 A, B, C 가 순서대로 출력된다.
비동기적 처리(Asynchronous)
- 동기적 처리처럼 작업을 순서대로 처리하는 것이 아닌, 한 번에 여러 개가 처리되는 것(병렬적으로).
var fs = require('fs');
// nodejs 에서는 비동기적인 방식이 더 선호된다.
console.log('A');
fs.readFile('syntax/sample.txt', 'utf8', function(err, result){ // return 값이 아닌 err 뒤에있는 인자가 읽은값으로 저장된다.
console.log(result);
});
console.log('C');
readFile 함수의 비 동기식 처리방법. 위 코드를 실행할때, A, B, C 가 출력되는 것이 아니라 A, C 가 출력되고 그 뒤에 B가 출력된다. 그 이유는 console.log('A')가 실행되고 난 뒤에, fs.readFile의 function이 실행된 후에 그 안의 console.log(result)는 나중에 실행되기 때문이다.
콜백(Callback)
- 특정 함수를 정의할 때 parameter로 콜백 함수를 넣는 방식. 콜백함수는 특정 함수에 전달되어서 특정 함수가 어떠한 조건에 의해 호출되는 함수이다. (자바 스크립트에서 이벤트 핸들러 처리를 예로 들 수 있다.)
function a(){
console.log('A');
}
// 함수를 변수로 정의 할 수 있음
var a = function(){
console.log('A');
}
function slowfunc(callback) {
callback();
}
slowfunc(a);
자바스크립트에서 위와 같이 함수를 2가지(function, 변수)로 정의될 수 있는데, callback 함수를 정의할 때는 보통 변수로 정의하여 콜백 함수를 호출할 특정 함수에 parameter로 함수를 정의한 변수를 넣는다.
위 코드의 실행순서는, slowfunc 함수가 실행이 되고, a라는 콜백 함수가 특정 함수에서 호출이 된 후, 콜백 함수 안의 내용 console.log('A')가 실행된다.