본문 바로가기
Back-End/NodeJS

[ NodeJS ] 동기, 비동기, 콜백

by 2CHAE._.EUN 2021. 8. 11.

* 해당 포스터는 생활코딩 강의를 정리한 내용입니다.


[ synchronous & asynchronous ]

 

synchronous( 동기적 ) : 오랫동안 처리돼야 하는 작업이 있더라도 작업이 완수될 때까지 기다렸다가 그 후에 처리

asynchronous( 비동기적 ) : 병렬적으로 동시에 여러가지 일을 처리

                                        * NodeJS가 비동기적으로 처리를 하기 위한 기능을 가지고 있다.

 

< readFile & readFileSync >

 

readFile( path, [option], callback )

readFileSync( path, [option] ) 

 

Sync가 있으면 동기적인 방식으로 처리하는 명령이고 Sync가 없다면 비동기적으로 처리하는 명령어

* NodeJS는 비동기적으로 처리하는 것을 선호

 

 

var fs = require('fs');
//fs 모듈을 불러와서 fs라는 이름을 붙인 변수

//readFileSync

console.log('A')
var result = fs.readFileSync('syntax/sample.txt', 'utf8');
console.log(result) //sample.txt안에 입력되어있는 문구가 출력돼야함
console.log('C')

var fs = require('fs');
//fs 모듈을 불러와서 fs라는 이름을 붙인 변수

//readFile

console.log('A')
fs.readFile('syntax/sample.txt', 'utf8', function(err,result){
  console.log(result);
});
console.log('C')

 

 

readFileSync는 리턴 값을 줘서 변수에 할당할 수 있지만 readFile은 리턴 값을 주지 않는다. 그래서 readFile 메소드는 

3번째 인자로 함수( function )를 줘야한다. 

 

fs.readFile('syntax/sample.txt', 'utf8', function(err,result){
  console.log(result);
});

 

→ readFile의 첫번째 인자로 준 파일을 읽는 작업이 끝나면 세번째 인자로 준 함수를 NodeJS가 실행시킨다.

   function의 첫번째 파라미터인 err는 읽어온 파일에 에러가 존재하면 에러를 인자로 제공하고 두번째 파라미터에는

   result로 파일의 내용을 인자로 전달해준다. 

 

readFileSync는 a,b,c가 순차적으로 실행되지만 readFile은 a,c,b가 출력된다.

readFile은 readFile대로 동작하고 있다가 파일을 읽는 작업이 끝나면 세번째 인자인 function이 호출되면서

function 안에 있는 코드가 실행된다. 

 


[ CallBack ]

 

fs.readFile('syntax/sample.txt', 'utf8', function(err,result){
  console.log(result);
});

 

readFile이라는 기능을 활용해서 syntax 폴더안에 있는 sample.txt 파일을 읽어온다. 읽어오는 작업이 다 끝다면

세번째 파라미터에 전달한 함수 인자를 실행해라

→ NodeJS에게 파일을 읽고 난 후에 함수를 호출하는 것을 통해 CallBack 실행

 

function a(){
  console.log('A');
}

var a = function(){ //이름이 없는 함수 : 익명함수 → 변수에 담아준다. 
  console.log('A');
}

a();

* 익명함수 : function에 함수 이름을 써주지 않아 이름이 없는 함수

                익명함수를 사용하기 위해서는 변수에 담아서 그 변수를 호출해야함

                → 자바스크립트에서는 함수는 값이다.

 

var a = function(){ 
  console.log('A');
}

function slowfunc(callback){
   callback();
}

slowfunc(a);

slowfunc이라는 오랜 시간에 걸쳐서 동작되는 함수가 있다고 가정하고 실행해보면

callback 파라미터는 a 변수가 가리키는 함수를 갖게된다.  

slowfunc 안에서 callback 함수를 호출할 경우 console.log('A');가 실행되서 콘솔에 A가 출력된다.

'Back-End > NodeJS' 카테고리의 다른 글

[ NodeJS ] API  (0) 2021.08.12
[ NodeJS ] 모듈  (0) 2021.08.12
[ NodeJS ] readdir + readFile  (0) 2021.08.10
[ NodeJS ] 콘솔에서의 입력값  (0) 2021.08.10
[ NodeJS ] NodeJS의 파일 읽기 기능 ( CRUD )  (0) 2021.08.10