프로그래밍에서 콜백(callback) 또는 콜백 함수(callback function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.
일반적으로 콜백수신 코드로 콜백 코드(함수)를 전달할 때는 콜백 함수의 포인터 (핸들), 서브루틴 또는 람다함수의 형태로 넘겨준다. 콜백수신 코드는 실행하는 동안에 넘겨받은 콜백 코드를 필요에 따라 호출하고 다른 작업을 실행하는 경우도 있다. 다른 방식으로는 콜백수신 코드는 넘겨받은 콜백 함수를 '핸들러'로서 등록하고, 콜백수신 함수의 동작 중 어떠한 반응의 일부로서 나중에 호출할 때 사용할 수도 있다 (비동기 콜백).
콜백은 폴리모피즘과 제네릭프로그래밍의 단순화된 대체 수법이며, 콜백 수신 함수의 정확한 동작은 콜백 함수에 의해 바뀐다. 콜백은 코드 재사용을 할 때 유용하다.
배경[편집]
콜백을 사용하는 의의를 이해할 수 있는 한 예로 연결 리스트 상의 각 요소에 대해서 여러 가지 처리를 수행하는 문제를 생각해볼 수 있다. 한 방법으로서 리스트 상의 반복자(iterator)로 각 객체를 처리하게 할 수 있다. 이것은 실제로 가장 일반적인 방법이지만, 이상적인 방법은 아니다. 반복자를 제어하는 코드(예를 들면 for 문)는 리스트의 노드를 방문할 때마다 노드를 복제해야 한다. 게다가 리스트의 갱신이 비동기 프로세스로 처리되는 경우, 반복자로 리스트를 탐색하는 동안에 요소를 잃어버리거나 다음 노드를 탐색할 수 없게 될 가능성이 있다.
대체 방법으로 새롭게 라이브러리 함수를 만들어, 적당한 동기신호를 통해 필요한 처리를 하도록 한다. 이 경우에도 리스트를 탐색할 때마다 동일한 함수를 호출해야 한다. 이 방식은 여러 응용 프로그램에 쓰이는 범용 라이브러리에는 적합하지 않다. 라이브러리를 개발할 때에는 모든 응용 프로그램의 요구를 예측할 필요가 없게 하며, 응용 프로그램 개발에서는 라이브러리에 추가된 기능에 대한 자세한 정보를 알 필요가 없도록 하는 것이 바람직하다.
콜백을 사용하면 이러한 문제를 해결할 수 있다. 리스트를 탐색하고자 할 때, 프로그래머는 응용 프로그램이 각 요소를 처리하는 방법을 콜백 코드로 제공한다. 이런 식으로 유연성을 해치지 않고 명확하게 라이브러리와 응용 프로그램을 구별할 수 있다.
참조- 위키백과
'IT기술 > CS(ComputerScience)' 카테고리의 다른 글
[MSA] 마이크로서비스 아키텍처, 모노리틱 아키텍처 이해하기 (0) | 2024.05.28 |
---|---|
OSS/BSS 이게 무엇인가? (0) | 2024.05.13 |
[CS] java에서 String이 불변 객체인 이유 (0) | 2024.04.15 |
[CS] SOP CORS 웹 개발에서 알아두면 좋은 내용 (0) | 2024.04.11 |
[CS] 동기와 비동기의 차이, 멀티스레드와 비동기의 차이 (0) | 2024.03.21 |