[JS] Syntax | 05. Callback

2024. 7. 22. 20:32·Language/JavaScript

콜백(Callback)은 함수의 매개변수로 또 다른 함수로 전달하는 것입니다.

이렇게 전달되는 매개변수 함술를 콜백함수(callback function)라고 합니다.

 

콜백 함수를 매개변수로 전달할 때는 괄호() 없이 이름만 입력하며,

함수내에서는 일반 함수를 사용할 때와 동일하게 사용할 수 있습니다.

function a(){
	console.log('this is function a');
}

function b(){
	console.log('this is function b');
}

function printFunc(func){
	func(); // 일반 함수처럼 호출합니다.
}

// 인자로 함수 a, b를 넘겨줍니다.
printFunc(a);
printFunc(b);

새로 선언할 필요 없는 간단한 함수의 경우, arrow function을 즉석으로 만들어 사용할 수도 있습니다.

function forEach(array, callback) {
  for (let elt of array) {
    callback(elt);
  }
}

const words = ['JavaScript', 'Java', 'Python'];

forEach(words, (elem) => console.log(elem)); // 각 요소를 출력합니다.

forEach(words, (elem) => console.log(elem.toUpperCase())); // 각 요소를 대문자로 출력합니다.

콜백은 비동기 처리를 할 때 유용하게 사용됩니다.

콜백함수를 인자로 넘겨주면, 이를 처리하는 동안 다음 명령을 먼저 수행할 수 있기 때문입니다.

콜백함수의 처리가 끝나면, 프로그램은 다시 콜백함수로 돌아와 결과값을 반환합니다.

불러서(call) 다시 되돌아오도록(back)하는 함수이니까요.

콜백 헬(Callbak Hell)

콜백은 비동기 처리가 가능하다는 장점이 있지만, 단점 또한 존재합니다.

바로 비동기 작업을 연속적으로 처리할 때 코드의 가독성을 떨어뜨릴 수 있다는 것입니다.

Async1((response) => {  // Async1의 출력값은 Async2의 입력값으로 쓰입니다.
  Async2(response, (data) => {  // Async2의 출력값은 Async3의 입력값으로 쓰입니다.
    Async3(data, (result) => {  // Async3의 출력값을 콘솔에 출력합니다.
      console.log(result);
    });
  });
});

예를 들어 다음과 같은 코드에서는 세 가지 비동기 함수 Async1, 2, 3이 사용됩니다.

각각은 이전 함수의 출력값을 입력값으로 사용해야 하는 함수입니다.

콜백은 모든 작업을 함수 안에서 처리하기 때문에, 이를 구현 하려면 콜백 안에 콜백을 넣어야 합니다.

그 결과 중첩된 콜백 형태가 될 수 밖에 없고, 이는 코드의 가독성을 떨어뜨립니다.

이런 현상을 콜백 헬(Callback Hell)이라고 합니다.

728x90

'Language > JavaScript' 카테고리의 다른 글

[JS] Syntax | 07. await & async  (0) 2024.07.25
[JS] Syntax | 06. Promise  (0) 2024.07.24
[JS] Style 속성과 속성값 정리  (0) 2024.02.20
[JS] Object | 06. Element  (0) 2024.02.14
[JS] Object | 05. Document  (0) 2024.02.14
'Language/JavaScript' 카테고리의 다른 글
  • [JS] Syntax | 07. await & async
  • [JS] Syntax | 06. Promise
  • [JS] Style 속성과 속성값 정리
  • [JS] Object | 06. Element
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (262)
      • CS (40)
        • ML (3)
        • CV (2)
        • PS (34)
      • Reveiw (17)
        • Paper (17)
        • Github (0)
      • Pytorch (5)
      • Language (58)
        • Python (7)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (71)
        • React (8)
        • SolidJS (20)
        • CSS (12)
      • UI (3)
      • Backend (15)
        • DB (17)
        • Node.js (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ps
    react
    Git
    figma
    SOLID
    UI
    API
    backend
    DB
    Three
    ts
    nodejs
    GAN
    js
    mongo
    frontend
    ML
    CV
    Express
    deploy
    html
    python
    review
    postgresql
    CSS
    CS
    C++
    PRISMA
    vscode
    PyTorch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[JS] Syntax | 05. Callback
상단으로

티스토리툴바