-
파이썬: 콜백함수(callback)Python/이것저것 파이썬 2023. 10. 23. 07:00반응형
함수(function)는 일등 시민(first-class citizen)
파이썬에서 함수는 일등 시민이다.
https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B8%89_%EA%B0%9D%EC%B2%B4
디테일한 것은 위키의 해당항목을 참고하면 된다.
일급 객체(first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.
보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.여기서 함수를 다른 함수에 인자로 넘길 수 있다는 점에 주목하자.
다음과 같은 것이 가능하다.* 함수명 뒤에 '()'를 붙이면 실행되고, 전달할 때는 함수명만 사용한다는 것에 주의한다.
def say_hello(): print('hello') def say_world(): print('world') def test(function): function() test(say_hello) test(say_world)
함수를 인자로 넘기는 이유를 생각해 보자.
대부분은 그 함수를 '실행'하기 위해서일 것이다.그런데 왜 이게 필요할까?
GUI에서 콜백의 사용
다음 코드를 보자.
# 1씩 증가하는 카운터 import tkinter counter = 0 def add(): global counter counter += 1 label.config(text=str(counter)) root = tkinter.Tk() label = tkinter.Label(root, text=str(counter)) label.pack() button = tkinter.Button(root, text='증가', width=15, command=add) button.pack() root.mainloop()
tkinter.Button(root, text='증가', width=15, command=add)
에서 command 인자로 add라는 함수명이 전달된 것을 볼 수 있다.
어떤 버튼을 눌렀을 때 어떤 동작(함수의 실행)을 한다는 것은 매우 직관적이며 자연스럽다.
(button이라는 버튼을 눌렀을 때 add라는 동작을 한다.)GUI에서 버튼의 동작을 정의할 때 콜백을 많이 쓴다..
(가장 흔하고 쉬운 예)* 이 때 람다 표현식이 유용하다는 것도 참고..
https://comdoc.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D비동기에서 콜백
또 비동기 프로그래밍 이라고 해서 여러 함수를 루프를 이용해 동시에 실행시켜 결과를 도출하는 프로그래밍 기법이 있다.
https://www.yalco.kr/21_async/
이때 동기에서는 한 줄 한 줄 순차적으로 실행되는 게 당연한데...
그 당연한 것이 비동기에서는 안된다(안될 수도 있다)... -0-비동기에서는 순차적으로 실행을 보장하려면...
함수의 마지막에 다음으로 실행할 함수를 넣어주어야 한다.다음에 실행할 함수를 하드코딩하지 않으려면 인수로 받아 마지막에 실행해야 하는 것...
마지막(back)에 실행(call)한다고 해서 callback이라는 말이 유래한다는 데 믿거나 말거나...https://ko.wikipedia.org/wiki/%EC%BD%9C%EB%B0%B1
이렇게 코딩하면 콜백 지옥이 ㅠ,.ㅠ
그래서 async await가 나왔....
반응형