티스토리 뷰
콜백함수. 말 그대로 부르면 오는 함수다.
콜백함수를 학습하기 전에, 동기와 비동기에 대해 알아보고 가자.
1. 동기 vs 비동기
동기적 처리
: 코드의 실행은 위에서 아래로 순차적으로 실행되는 것이 원칙이다.
동기적 처리는 코드의 요청과 함께 실행된 결과가 나타나야 한다. 때문에, 실행이 오래걸리는 로직의 순서가 오면 해당 로직의 결과가 나타날 때 까지 다음 로직들은 아무것도 못한 채 대기해야 한다.
쉬운 예를 들자면, 테이블링이나 번호를 적으면 순서에 문자를 보내주는 방식등이 없는 맛집에서 식사를 하기 위해 오로지 자신의 순서가 올 때 까지 주구장창 줄을 서 기다리는 상황이 될 수 있겠다.
비동기적 처리
: 코드가 순차적으로 실행되다가, 어떤 무거운 로직이 걸려도, 해당 로직이 로딩되는 동안 다음 순서의 로직이 실행되는 것 이다. 결과는 굳이 요청과 함께 나타나지 않아도 되는 것이다. 매우 효율적임.
쉬운 예를 들자면, 테이블링이나 번호를 적으면 순서에 문자를 보내주는 제도가 있어 번호표를 받고 대기 시간에 어딘가 놀러갔다가 호출되면 식사하는 것 이다.
이 비동기적 처리를 위해 이용하는 함수가 콜백함수다. 함수의 동작 시점을 컨트롤 할 수 있는 것이다.
2. 콜백함수
우선 동기적인 처리의 예시를 보자.
console.log("a");
console.log("b");
console.log("c");
// a, b, c 차례로 출력
예상대로 a, b, c가 차례로 출력된다.
그렇다면 비동기는?
console.log("a");
setTimeout(function b(){
console.log("b");
}, 1000); //1초 뒤에 b를 출력
console.log("c");
위의 코드는 원하는 시간에 해당 함수를 출력하는 것이다.
때문에 결과는 a, c, b가 됨.
여기서 중요한건, a가 출력되고
setTimeout을 만나는 순간 부터 1초를 세기 시작하고 초를 세는 동안 c가 출력된 후 b가 출력되는 것이다.
3. 조금 극단적인 콜백함수(콜백지옥)
콜백을 남용하면 읽기도 어렵고 유지보수도 힘든 형태가 만들어진다.
function forLogin('page', function (response) {
checkId(response, function (id) {
checkPw(id, function (PW) {
result(PW, function (result) {
console.log(result);
});
});
});
});
로그인을 위한 함수다. 이 과정이 끝나면 다음과정을, 다음과정이 끝나면 또 다음과정을 수행하는 함수를 호출하기 위함이다.
짧아서 망정이지 실제로 엄청나게 길어진다면 내가 쓴 코드지만 이해를 못 할 수도 있다.
이를 해결하기 위해 여러가지 방법이 있는데
그 중 하나가 promise를 이용하는 것.
또, async & await 를 필요한 부분에 붙이면 조건에 따라 함수를 호출하기에 효율적인 코딩이 가능하다.
프로미스는 이해가 쉽지 않기 때문에 정리가 되면 게시할예정....흑흑
참고:
'Basic_Studies > JavaScript' 카테고리의 다른 글
[JavaScript] 모듈 export, import (0) | 2021.01.08 |
---|---|
[JavaScript] 구조 분해 할당(Destructuring assignment) (0) | 2020.12.15 |
[JavaScript] 삼항연산자(Ternary operator) (0) | 2020.09.06 |
[JavaScript] 화살표 함수(Arrow Function) (0) | 2020.08.31 |
[JavaScript] 호이스팅(hoisting) 이란? (0) | 2020.08.31 |
- Total
- Today
- Yesterday
- bs4 크롤링
- nuxt 공식문서
- 카페음료테스트
- vscode venv
- nuxt 공식문서 한글
- NextJS
- 백준 10989 파이썬
- nextjs 스크롤
- 파이썬 크롤링
- next.js 리다이렉트
- 리액트 파라미터 넘기기
- 리액트 스크롤
- 자바스크립트
- 글래스모피즘 구현
- 10989 파이썬
- 파이썬 flask
- Til
- react router
- 움직이는 글래스모피즘
- css 글래스모피즘
- 리액트 컴포넌트
- 화이팅
- 파이썬 정렬
- getserversideprops redirect
- dvd 효과
- css marquee
- 리액트 라우터
- 글래스모피즘 애니메이션 구현
- 리액트
- nextjs 파라미터 넘기기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |