1. [프로그래밍] 콜백 기법, 콜백 함수
ㅇ 호출하는 쪽과 호출받는 쪽이 반전되어짐 (제어권 역전)
ㅇ 콜백 함수의 사용 이유
- 함수 내 변하지 않는 공통 로직은 그대로 두고,
- 가변적인 로직은, 외부에서 추상화해서(즉, 함수화해서),
- 필요시 마다 그에 맞는 함수 그 자체를 인수로써 전달 받아 사용할 수 있으면,
- 함수 정의를 외부에서 별도로 가변화 할 수 있어서, 유연성이 커짐
- 이는 수학적으로, 함수의 합성과도 비슷함
ㅇ 콜백 함수의 사용 방식
- 호출되는 함수의 괄호 () 내에, 콜백 함수를 인수로써 전달하고,
- 호출되는 함수의 내부에서, 인수로써 전달받은 그 콜백 함수를 실행시킴
ㅇ 콜백 함수 이란?
- 다른 함수에 인수로써 넘겨질 수 있는 함수 임
. 즉, 함수(또는,객체)를 매개변수로써 전달하고서,
. 그것으로하여금 역 호출 등을 하게 함
- 이때, 인수(콜백 함수)로써 넘겨 받은 함수(호출된 함수)는,
. 그 인수(콜백 함수)가 작업하는 내용에는 관여하지 않음
ㅇ 콜백 함수의 특징
- 실행시 제어권을 콜백 함수가 행사함 (제어 역전)
. 호출되는 함수에 인수로써 넘겨지는 콜백 함수의 경우에, ☞ 고차 함수 참조
. 호출되는 함수 쪽에서 인수로써 넘겨진 콜백 함수에게 제어권을 부여하게 됨
- 콜백 함수의 선택 주체는 호출자
. 어떤 콜백 함수를 쓸지는 호출자의 고유 권한 임
- 호출된 함수는 콜백 함수의 작업 내용에 관여 안함
. 호출된 함수는 콜백 함수를 실행하지만,
. 그 콜백 함수가 작업하는 내용에는 관여하지 않게됨
ㅇ 콜백 함수의 사용 시기
- 주로, 특정 이벤트(성공,실패,종료 등) 발생시,
- 그에 맞춘 적당한 콜백 함수를 수행
ㅇ 콜백 함수의 용도 例)
- 콜백 함수를 사용한 비동기식 처리 모델 (JavaScript에서 빈번히 사용됨)
. 여기서, 비동기식 처리 모델 이란?
.. 호출될 콜백 함수를 미리 파라미터(매개변수)로써 전달해 놓고,
.. 특정 이벤트(처리 종료 등)가 발생하면,
.. 그에따라 콜백 함수를 호출케 하는 것
. JavaScript 주요 사용 例) 타이머 함수, 이벤트 처리, Ajax 처리 등
ㅇ 콜백 함수의 단점 : 콜백 지옥(callback hell)
- 중첩된 콜백 함수의 실행이 잦아짐
. 例) 외부 데이터를 가져올 때, 그 결과에 따라 또다른 콜백 함수를 실행하고,
.. (요청이 성공/실패 또는 결과 값에 따라 등등)
.. 또다시, 그 결과에 따라 또다른 콜백 함수를 중첩 실행하는 등
- JavaScript에서 콜백 지옥의 대안 : 프라미스 객체(Promise)
2. [일반 전화] 콜백 서비스
ㅇ 걸려온 전화를 끊은 후에 다시 발신자에게 전화를 되걸어주는 것
ㅇ 국제전화 콜백 서비스
- 두 나라 사이의 국제 전화 요금이 차이가 나는 것을 이용
- 주로, 요금이 싼 나라(미국 등)의 사업자들이 요금이 상대적으로 비싼 나라(통신사업을
독점하거나 국가에서 운용 등)에 진출하여, 그 나라의 가입자가 거는 국제 전화를
콜백 기능에 의해 자기 나라의 발신으로 처리해 주고 요금을 받는 형태
- 즉, 국제 전화 요금이 비싼 측에서 전화를 거는 경우에, 호출 신호만을 보낸 뒤 끊으면
상대측에서 되걸어 주는 등의 방법으로 전화 요금을 싸게하고 그 대가를 받는 서비스