Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- sqlite
- DB
- Three
- UI
- DM
- API
- mongo
- html
- CSS
- CV
- js
- figma
- ps
- react
- SOLID
- vscode
- PRISMA
- python
- Git
- frontend
- ML
- postgresql
- C++
- nodejs
- ts
- review
- GAN
- Linux
- Express
- PyTorch
Archives
- Today
- Total
아카이브
[JS] Syntax | 05. Callback 본문
콜백(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 (1) | 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 |