우리집에는 10살 남자아이가 산다.
그 나이의 아이 부모라면 누구나 고민하겠지만 나도 아이의 Screen time을 어떻게 정해야 할지 고민이 많았다. 고민끝에 나온 결론은 그 전까지 매일매일 학교 끝나면 같이 하던 공부에 접목시키는 것이었다. 매일 공부가 끝나면 30분 Screen time이 가능한 쿠폰을 주는 것이었다. 아이는 편히 볼 수 있는 Screen time이 생기고 부모는 아이의 공부 동기를 부여할 수 있어 서로에게 좋은 해결책이었다.
그러던 어느 날, 내가 설거지를 하고 있는데 아이가 와서 "아빠! 같이 놀자!!" 라고 했다. 하지만, 내가 설거지 중이어서, "아빠 지금 설거지 중이어서 같이 놀 수가 없어" 라고 말하고 설거지에 집중하고 있었다.
그 사이에 아이는 쿠폰을 사용해서 30분 동안 TV를 보고 있었다.
그리고 잠시 뒤 같이 외출하려고 하는데 아이가 아빠랑 놀지 못했다고 아쉬워 하길래, "아빠가 설거지 하고 나니까 티비 보고 있던데?"라고 했더니
"그럼 아빠가 설거지 끝내고 나면 나한테 알려줘." 라고 말했다.
오! 이것은 바로 콜백함수(Callback function)의 개념아닌가!
콜백 함수(Callback function)는 어떤 함수가 다른 함수에 인수로 전달되어 특정 조건이나 이벤트가 발생할 때 호출되는 함수라고 할 수 있다. 해당 개념을 위의 상황에 대입해보자.
먼저 아이에게 알려주는 함수를 notifyChild(), 설거지 하는 함수를 doDishes()로 정의할 수 있다.
아이는 내가 설거지를 하고 나서 자신에게 알려주기를 원했으니, doDishes() 함수 안에서 notifyChild() 함수를 호출해야 한다. 그렇다면 doDishes() 함수는 매개변수로 notifyChild()를 받아야 한다.
이를 javascript 코드로 옮겨보면 다음과 같다.
이 코드에서 doDishes() 함수는 설거지가 끝나면 notifyChild() 콜백 함수를 호출해 아이에게 알린다. 실제로 아이가 설거지가 끝나면 알려달라고 했던 상황과 정확히 일치하는 구조다.
콜백 함수는 특정 작업이 완료된 후 자동으로 다음 작업을 연결할 수 있는 유용한 도구로, 프로그래밍뿐만 아니라 일상생활에서도 쉽게 적용할 수 있다. 10살 아이처럼 이런 프로그래밍 원리를 실생활에 접목해보면 재미있고 유용한 아이디어를 발견할 수 있을 것이다.