콜백 함수(Callback Function, 영어: callback function)는 다른 함수의 인자로 전달되어, 특정 이벤트나 작업이 완료되었을 때 호출되는 함수를 의미한다. 이 개념은 비동기 프로그래밍, 이벤트 기반 프로그래밍 및 함수형 프로그래밍에서 널리 활용되며, 프로그램의 흐름 제어와 코드의 재사용성을 높이는 데 기여한다.
개요
콜백 함수는 보통 익명 함수(anonymous function) 형태로 정의되거나, 이름이 있는 함수로 구현되며, 다른 함수의 인자로 전달되어 필요 시점에 실행된다. 이를 통해 프로그램은 작업을 요청한 후, 결과가 준비되었을 때 자동으로 후속 처리를 수행할 수 있다. 예를 들어, 네트워크 요청, 파일 I/O, 타이머 이벤트 등의 비동기 작업에서 결과 처리 로직을 콜백 함수로 구현할 수 있다.
정의 및 등록
콜백 함수를 사용하기 위해서는 먼저 함수를 정의한 후, 이를 다른 함수의 인자로 전달하여 등록해야 한다. 등록된 콜백 함수는 호출되는 시점에 특정 작업의 결과를 처리하거나, 추가 작업을 수행하도록 설계된다. 이 방식은 코드의 간결성을 높이고, 함수형 프로그래밍 패러다임에서 고차 함수와 결합되어 데이터를 변환하거나 처리하는 데 유용하다.
특징 및 활용
- 간결성
- 람다 함수와 같이 짧은 구문으로 간단한 작업을 처리할 수 있다.
- 비동기 처리 지원
- 네트워크 요청이나 파일 I/O 등 비동기 작업 완료 후 자동 호출되어, 이벤트 기반 프로그래밍을 가능하게 한다.
- 고차 함수와의 결합
- map, filter, reduce 등의 함수형 프로그래밍 함수와 함께 사용되어, 데이터 집합에 대한 반복적 처리를 간단하게 구현할 수 있다.
- 재사용성 및 모듈화
- 한 번 정의된 콜백 함수는 여러 함수의 인자로 전달되어 다양한 작업에서 재사용할 수 있다.
예제
아래는 파이썬과 자바스크립트에서 콜백 함수를 정의하고 등록하여 사용하는 예제이다.
파이썬 예제
def fetch_data(callback):
# 데이터 처리나 비동기 작업 시뮬레이션
data = "결과 데이터"
# 작업 완료 후 콜백 함수 호출
callback(data)
def process_data(result):
print("받은 데이터:", result)
# fetch_data 함수에 process_data 함수를 콜백으로 등록하여 호출
fetch_data(process_data)
자바스크립트 예제
function fetchData(callback) {
// 비동기 작업 시뮬레이션: 1초 후에 콜백 함수 호출
setTimeout(function() {
var data = "결과 데이터";
callback(data);
}, 1000);
}
function processData(result) {
console.log("받은 데이터:", result);
}
// fetchData 함수에 processData 함수를 콜백으로 전달하여 호출
fetchData(processData);
역사 및 배경
콜백 함수의 개념은 수학의 람다 대수(lambda calculus)에서 기원을 찾으며, 함수형 프로그래밍 언어에서 핵심적인 역할을 담당해 왔다. 현대 프로그래밍 언어는 콜백 함수를 통해 비동기 및 이벤트 기반 프로그래밍을 효과적으로 지원하며, 코드의 재사용성과 모듈화를 향상시키고 있다.
같이 보기
참고 문헌
- Abelson, H., and Sussman, G. J. (1996). Structure and Interpretation of Computer Programs. MIT Press.
- Bird, R., and Wadler, P. (1988). Introduction to Functional Programming. Prentice Hall.
- Odersky, M., Spoon, L., and Venners, B. (2010). Programming in Scala. Artima Inc.