Post

콜백 함수와 재귀 함수의 차이

콜백 함수와 재귀 함수의 차이

소개

JavaScript에서 함수는 일급 객체로 취급되어 다른 함수의 인자로 전달되거나, 반환값으로 사용될 수 있습니다. 이 문서에서는 콜백 함수와 재귀 함수의 차이점과 각각의 사용 사례에 대해 설명합니다.

콜백 함수

정의

콜백 함수(Callback Function)는 다른 함수의 인자로 전달되는 함수입니다. 특정 작업이 완료된 후 호출되는 함수로 비동기 프로그래밍에서 자주 사용됩니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
function fetchData(callback) {
  setTimeout(() => {
    const data = { name: 'John', age: 30 };
    callback(data);
  }, 1000);
}

function handleData(data) {
  console.log('데이터를 처리합니다:', data);
}

fetchData(handleData);

위 예제에서 fetchData 함수는 비동기 작업을 수행하고, 작업이 완료되면 callback 함수를 호출하여 결과를 전달합니다.

장점

  1. 비동기 처리: 콜백 함수는 비동기 작업을 처리하는 데 유용합니다.
  2. 유연성: 함수의 동작을 동적으로 변경할 수 있습니다.

단점

  1. 콜백 지옥(Callback Hell): 콜백 함수가 중첩되면 코드의 가독성이 떨어질 수 있습니다.
  2. 에러 처리: 비동기 작업에서 발생하는 에러를 처리하기 어렵습니다.

재귀 함수

정의

재귀 함수(Recursive Function)는 자기 자신을 호출하는 함수입니다. 문제를 더 작은 하위 문제로 나누어 해결할 수 있을 때 사용됩니다.

예제

1
2
3
4
5
6
7
8
function factorial(n) {
  if (n === 0) {
    return 1;
  }
  return n * factorial(n - 1);
}

console.log(factorial(5)); // 120

위 예제에서 factorial 함수는 자기 자신을 호출하여 팩토리얼을 계산합니다.

장점

  1. 문제 분할: 복잡한 문제를 더 작은 하위 문제로 나누어 해결할 수 있습니다.
  2. 간결성: 반복문을 사용하는 것보다 코드가 더 간결해질 수 있습니다.

단점

  1. 스택 오버플로우: 재귀 호출이 너무 깊어지면 스택 오버플로우가 발생할 수 있습니다.
  2. 성능: 반복문에 비해 성능이 떨어질 수 있습니다.

주요 차이점

  1. 용도:
    • 콜백 함수: 비동기 작업을 처리하거나, 함수를 동적으로 실행할 때 사용됩니다.
    • 재귀 함수: 문제를 재귀적으로 해결할 때 사용됩니다.
  2. 구조:
    • 콜백 함수: 다른 함수의 인자로 전달되어 실행됩니다.
    • 재귀 함수: 함수 내부에서 자기 자신을 호출합니다.
  3. 에러 처리:
    • 콜백 함수: 비동기 작업에서 에러 처리가 어렵습니다.
    • 재귀 함수: 에러 처리가 비교적 단순합니다.
  4. 복잡성:
    • 콜백 함수: 중첩된 콜백으로 인해 코드가 복잡해질 수 있습니다.
    • 재귀 함수: 깊은 재귀 호출로 인해 스택 오버플로우가 발생할 수 있습니다.

결론

콜백 함수와 재귀 함수는 각각 다른 용도와 특징을 가지고 있으며, 상황에 따라 적절히 사용해야 합니다. 콜백 함수는 비동기 작업과 동적 함수 실행에 유용하며, 재귀 함수는 문제를 재귀적으로 분할하여 해결하는 데 유용합니다. 두 개념을 잘 이해하고 활용하면 JavaScript에서 더 효율적이고 가독성 높은 코드를 작성할 수 있습니다.

다음시간에 계속…

image

This post is licensed under CC BY 4.0 by the author.