Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Joon's Space

[NodeJS] 동기(Synchronous), 비동기(Asynchronous), 콜백(Callback) 개념 [생활코딩] 본문

Web/NodeJS

[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')가 실행된다. 

 

반응형