동기와 비동기

기초/Node.js|2021. 6. 21. 21:19

동기(synchronous) : 하나의 일을 마칠 때까지 기다렸다가 그 일이 끝나면 순서대로 다음 일을 처리하는 것

비동기(asynchronous) : 기다리지 않고 다른 일을 동시에 진행하면서 순서대로 처리하는 것(=효율적이고 복잡하다)

https://nodejs.org/dist/latest-v14.x/docs/api/fs.html#fs_fs_readfilesync_path_options

예시로, readFile을 살펴보자.

readFile과 readFileSync가 있다. Sync는 callback이 없다.

node js는 비동기적으로 처리하는 것을 선호한다. → 동기적 처리를 따로 명령어를 만들어놨으니...

fs.readFileSync(path[,options])

//readFileSync
console.log("A");
var result = fs.readFileSync("syntax/sample.txt", "utf-8");
console.log(result);
console.log("C");
//결과는 ABC

fs.readFile(path[, options], callback)

//readFile
console.log("A");
var result = fs.readFile("syntax/sample.txt", "utf-8"
  , function (err, result) {
    console.log(result);
  });
//readFileSync는 return값을 주지만 readFile은 주지 않는다.
console.log(result);
console.log("C"); 
//결과는 ACB

console.log외에 별도로 알아서 작동하고 있다가 나중에 작업이 완료되면 함수가 호출되면서 결과를 출력하는 것.

readFileSync는 return값을 주지만 readFile은 주지 않는다.

대신 함수를 세 번째 인자로 주어야 한다.

파일을 읽는 작업이 끝나면 세 번째 인자로 준 함수를 node js가 실행시키면서

에러가 있다면 에러를 제공하고 파일의 내용을 인자로 제공하도록 약속되어 있다.

function a() {
  console.log("A");
}
//위의 a라는 함수와 똑같이 이름만 빼 보자.
function () {
  console.log("A");
}
//함수의 기능, 함수의 내용 모두 똑같지만 이름이 없다 = 익명함수
//하지만 이름이 없으면 호출할 수가 없으니 아래와 같이 만들어 준다.
var a = function () {
  console.log("A");
}
//a라는 변수의 값으로 함수를 정의

a가 담고 있는 값인 함수를 호출할 수 있다.

콜백(callback, 나중에 전화해)

"알아서 시킨 내용을 진행하고 있다가 완료되면 나한테 알려줘" 라는 의미.

//엄청나게 오래 걸리는 함수가 있다고 해 보자.
//이 기능의 실행이 끝난 다음에 일이 끝났으니 다음 일을 하세요 라고 하고 싶다면,
//콜백을 받으면 된다!
function slowfunc(callback){
  callback();
}
slowfunc(a);

'기초 > Node.js' 카테고리의 다른 글

모듈  (0) 2021.06.24
Javascript 함수의 기본 문법  (0) 2021.06.20
Boolean, 비교연산자, 조건문  (0) 2021.06.16

댓글()