Nodejs를 공부하다가 콜백함수에 대해 찾아보았다.
사용법이 아닌 콜백함수 자체에 대해 명료하게 설명한 댓글이 있어 필사한다.
함수를 호출할 때 call이라는 표현을 씁니다. (전화를 거는 것과 같은 의미로 씁니다.)
이건 흐름제어에 대한 주도권과도 관계가 있는데요.
개발자가 주도권을 잡고 필요한 함수를 호출하는게 일반적인 개발의 흐름입니다.
제공되는 라이브러리 함수 등은 모두 주도권을 가진 개발자가 직접적으로 호출해야 하죠.
이건 내가 (주도권을 가진 사람을 A라고 명명) 전화를 걸어야만 전화 받는 사람(B라고 명명하자)이 전화를 받고 무엇인가를 행하는 것과 같은 개념입니다.
이 때 전화를 받은 B가 A가 요청한 일을 하다가 또는 다한 후에 A에게 무언가를 요구할 수 있습니다.
그런데 이 때 B가 A에게 요구하는 시점은 B가 결정할 수 있습니다.
그러면 주도권이 B에게 넘어간 것이죠.
최초의 주도권은 A가 가지고 있었지만 B가 A한테 요구할 때는 B가 주도권을 가지게 된겁니다. (물론 최초에는 A가 주도권을 가지고 있었죠.)
B의 요구에 A는 응해서 일을 해야 합니다. 그래야 최초에 A가 요구한 일이 완료가 될테니깐요.
이런 경우 A가 할 일은 두 가지가 됩니다. A가 주도권을 가지고 처리해야 할 일 (함수) B가 요청하면 해줘야 할 일 (함수)
이렇게 두 개의 함수가 생기는데 그냥 함수만 보면 어떤 일이 어떤 일인지 알 수가 없죠.
그래서 B가 요청하면 해줘야 할 일에 대한 함수를 콜백(전화받은 사람이 다시 전화한 사람에게 전화하는 것)함수라고 명명하게 된겁니다.
호출하는 시점을 내가 제어할 수 있다면 함수
호출하는 시점을 내가 아닌 다른 사람이 제어할 수 있다면 콜백함수라고 이해하시는 게 가장 간단하게 이해할 수 있는 내용일겁니다.
콜백함수가 사용되는 여러 사례들은 다 이 범위를 기준으로 함수인지 콜백함수인지 명명하는 겁니다.
그러면 콜백함수는 콜백으로만 사용되나요? 아닙니다. 콜백함수는 직접 호출로도 사용이 가능합니다.
한 가지 참고할 것은 콜백함수는 함수를 선언하고 이 함수를 누가 호출하느냐에 따라 결정되는 것이기 때문에 모든 함수가 콜백함수 일 수도 있다는 것입니다.
js에서 callback함수 기능을 사용하는 것은 '함수 재사용의 용이함' 때문이라고 할 수 있었다.
물론 배보다 배꼽이 더 커지는 상황 즉, 한 함수 내에서 callback함수가 여러 번 호출되는 경우에는 async나 promise로 처리해줘야 하지만 말이다.
단순 사용법이 아닌 위와 같이 용어의 definition으로 접근하는 방식은 재밌다. 언젠간 도움이 되지 않을까?
'기타' 카테고리의 다른 글
'ssh' is not recognized as an internal or external command, operable program or batch file. 해결법 (0) | 2024.03.05 |
---|---|
프로그램 메모리 세그먼트 (0) | 2022.09.17 |
컴파일(Compile)과 런타임(Runtime) (0) | 2022.09.16 |
프로그램을 누가,왜 번역하는가?(프로그래밍 언어의 역사) (0) | 2022.09.08 |