ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Callback 함수란 무엇인가? 재귀함수와의 차이는?
    ETC 2022. 10. 3. 02:11

     

     

    자바스크립트 프로그래밍을 하다보면 콜백 함수(Callback Function)이라는 용어를 많이 접하게 됩니다.

    저의 경우에는 특히 오픈API의 가이드를 볼 때 가장 많이 접했던 것 같습니다.

     

    네이버 로그인 개발가이드 中

     

     


     

    Callback 함수란?

     

    출처: 위키백과

     

    자바스크립트는 어떤 함수를 실행할 때, 매개변수로 함수를 전달할 수 있습니다.

    이 매개변수로 전달되는 함수를 콜백 함수라고 합니다.

     

     

    간단한 예제를 만들어 보았습니다.

    함수를 두 개 만들었는데, 첫 번째 fn함수에서는 매개변수로 받은 함수를 호출하고 있습니다.

    두 번째 iAmCallback 함수는 매개변수를 콘솔에 출력하는 함수입니다.

    fn만 호출하되, 매개변수로 두 번째 함수를 전달하면 콘솔에는 다음과 같이 찍히게 됩니다.

     

     

    어떤 함수를 호출할 때 매개변수로 숫자, 문자열 등을 전달하는 것과 동일합니다.

    단지 그 매개변수가 함수, 즉 실행 가능한 코드일 뿐입니다.

     


    재귀함수(Recursion)와의 차이?

     

    재귀함수 또한 어떤 함수 안에서 함수를 실행한다는 관점으로 보면 콜백함수와 비슷하게 동작합니다.

    그러나 재귀함수는 자기 자신을 호출합니다.

     

    함수 내부에서 자기 자신을 호출하는 코드를 만나면, 해당함수를 그 안에서 다시 실행하고, 또 그 안에서 다시 실행하게 됩니다. 따라서 재귀함수를 작성할 때에는 탈출 조건(break point)를 반드시 두어야 합니다.

    무한루프(while(true))를 사용할 때 탈출 조건을 지정하는 것과 동일합니다.

     

    그렇지 않을 경우 재귀가 무한히 수행되어 StackOverflowError가 발생하게 됩니다.

     

     

     

    마찬가지로 간단한 재귀함수 코드를 작성해 보았습니다.

    해당 함수는 입력받은 수가 1이될 때까지 누적해서 더하는 코드입니다.

     

    수행결과는 어떻게 될까요?

     

     

    1부터 5를 더한 15가 출력되게 됩니다.

     

    첫번째 iAmRecursion(5)를 수행하게 되면, return문에서 자기자신을 호출하는 코드를 만나게됩니다.

    그러면 그 함수는 다시 동일한 함수를 호출하게 되고, 똑같이 return문에서 만나게 됩니다.

    이렇게 반복하다가 num이 1이 되면 재귀를 만나기 전 return에 걸려 탈출하게 되고, 전체 수행결과를 반환하게 됩니다.

     

    return문만 놓고 보면 순서는 다음과 같습니다.

     

     

    만약 해당 함수에서 탈출 조건이 없다면 어떻게 될까요?

     

     

    이렇게 무한히 재귀가 호출되어 영원히 끝나지 않는 실행문이 됩니다.

    각 프로그램 언어에서는 무한 호출을 막기 위해 맥시멈 호출량이 정해져있고, 이 호출량을 넘어서면 에러를 발생시킵니다.

    댓글

Designed by Tistory.