Python

[Python] 콜백 함수 (Callback)

비번변경 2024. 1. 25. 23:57

개요

프로그래밍 업무를 하다 보면 콜백함수란 단어를 간혹 듣게 되는데, 개인적으로 개념을 잘 이해하고 있는 것 같진 않아 이번 기회에 정리해보려고 한다.

 

 

Callback

프로그래밍에서 콜백 또는 콜백함수란 다른 코드의 인수로 넘겨주는 실행 가능한 코드를 말한다. 일반적으로 함수는 사용자 정의 코드에서 호출하는데, Callback은 이와 반대로 함수 내에서 사용자 정의 코드를 호출하게 된다. 호출 방향이 일반적인 경우와 반대이기 때문에 Call + Back이라고 일컬어진다.

콜백함수를 다른 코드로 전달할 때는 콜백 함수의 포인터, 람다 함수의 형태로 전달하며 필요에 따라 즉시 실행하거나 나중에 실행할 수 있다.

 

 

예시

간단한 예시로 콜백함수의 구현을 알아본다.

 

아래와 같이 입력 받은 숫자가 양수인지, 음수인지 확인하는 함수 두 개가 있다고 하자.

def get_postive(num):
    return num > 0

def get_negative(num):
    return num < 0

 

아래의 함수는 numbers라는 반복 가능한 형태의 숫자 데이터와 callback이라는 매개변수를 전달받는 filter_data 함수다. numbers 내 원소에 대해 callback으로 전달받은 함수를 수행한 결괏값이 참인 경우에만 반환할 값에 데이터를 추가한다.

def filter_data(numbers, callback):
    result = []
    for n in numbers:
        if callback(n):
            result.append(n)
    return result

 

실행부는 아래와 같다.

if __name__ == '__main__':
    list_num = random.choices(range(-10, 10), k=5)
    print('list_num', list_num)
    print('positive', filter_data(list_num, callback=get_postive))
    print('negative', filter_data(list_num, callback=get_negative))

하나의 함수에 하나의 데이터를 전달했으나, 전달한 callback 함수의 차이로 수행 결과가 다른 것을 확인할 수 있다.

 

 

참고 문서

https://ko.wikipedia.org/wiki/%EC%BD%9C%EB%B0%B1

https://wikidocs.net/165265

https://frhyme.github.io/python-lib/callback_func/

https://satisfactoryplace.tistory.com/18

728x90