동기(Synchronous)와 비동기(Asynchronous)

YS·2022년 8월 18일
0

동기(Synchronous)

  • 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다.
  • 함수를 호출하는 곳에서 호출되는 함수가 결과를 반환할 때까지 기다린다.
  • 작업 완료 여부를 계속해서 확인한다.

비동기(Asynchronous)

  • 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업이 요청된다.
  • 함수를 호출하는 곳에서 결과를 기다리지 않고, 다른 함수 (callback)에서 결과를 기다린다..
  • 작업 완료 여부를 확인하지 않는다.

블록킹(Blocking)과 논블록킹(non-blocking)

  • 블록킹 (Blocking) : 자신의 수행결과가 끝날 때까지 제어권을 갖고 있는 것
  • 논블록킹 (non- blocking) : 자신이 호출되었을 때 제어권을 자신을 호출한 쪽으로 넘기고 자신을 호출한 쪽에서 다른 일을 할 수 있도록 하는것

비동기적 프로그래밍 방법

Callback 함수, Promises, async & await

Callback 함수

Callback 이란?

  • 다른 함수가 실행을 끝낸 뒤 실행(call back)되는 함수 (=> 나중에 호출되는 함수)를 말한다.
  • 다시 말해 코드를 통해 명시적으로 호출하는 함수가 아니라, 함수를 등록해놓은 후 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 말한다.
  • 파라미터로 함수를 전달받아, 함수의 내부에서 실행된다.

콜백함수 (Callback Function) 사용 이유

  • 자바스크립트에서 비동기적 프로그래밍을 할 수 있기 때문이다.
  • 자바스크립트는 싱글스레드를 사용하는데, 멈춤을 방지해준다. 즉 블록킹을 방지하여 싱글스레드가 논블록킹으로 동작하게 한다.
    • 싱글 스레드
      -> 싱글스레드는 한 번에 하나의 작업만 수행할 수 있다.

    • 싱글 스레드로 어떻게 비동기 작업이 가능할까
      -> 자바스크립트의 메인 스레드인 이벤트 루프가 싱글 스레드이기 때문에 자바스크립트를 싱글스레드 언어라고 부른다. 그러나 자바스크립트는 이벤트 루프만 독립적으로 실행하지는 않고, 웹 브라우저나 NodeJS 같은 멀티 쓰레드 환경에서 실행된다.

      -> 즉, 동시성을 보장하는 비동기, 논블록킹 작업들은 JavaScript 엔진을 구동하는 웹 브라우저, NodeJS(런타임 환경) 에서 담당한다.

콜백함수(Callback Function) 사용 유형

1. 익명 함수 사용

  • 콜백함수는 이름 없는 '익명의 함수'를 사용한다. 함수의 내부에서 실행되기 때문에 이름을 붙이지 않아도 된다.

2. 함수의 이름 넘기기

  • 자바스크립트는 null 과 undefined 타입을 제외하고 모든 것을 객체로 다룬다. 함수를 변수 또는 다른 함수의 변수처럼 사용할 수 있다. 함수를 콜백함수로 사용할 경우, 함수의 이름만 넘겨주면 된다.

3. 전역변수, 지역변수를 콜백함수의 파라미터로 전달 가능

  • 전역변수 : 함수 외부에서 선언된 변수
  • 지역변수 : 함수 내부에서 선언된 변수

콜백함수(Callback Function) 주의할 점

  1. this를 사용한 콜백함수
  2. 콜백지옥 (Callback Hell)
  • 콜백 지옥은 콜백 함수를 익명 함수로 전달하는 과정이 반복되어 코드의 들여쓰기 수준이 감당하기 힘들정도로 깊어지는 현상이다.
  • 주로 이벤트 처리나 서버 통신과 같은 비동기적인 작업을 수행하기 위해 이런 형태가 자주 등장하는데, 가독성이 떨어지면서 코드를 수정하기 어려워진다.
  • 비동기적인 작업을 수행하기 위해 콜백함수를 익명하수로 전달하는 과정에서 생기는 콜백 지옥을
    Promise, async/await, Generator 등을 사용해 방지할 수 있다.
profile
"나의 개발 노트"

0개의 댓글