콜백 함수와 재귀 함수의 차이
콜백 함수와 재귀 함수의 차이
소개
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
함수를 호출하여 결과를 전달합니다.
장점
- 비동기 처리: 콜백 함수는 비동기 작업을 처리하는 데 유용합니다.
- 유연성: 함수의 동작을 동적으로 변경할 수 있습니다.
단점
- 콜백 지옥(Callback Hell): 콜백 함수가 중첩되면 코드의 가독성이 떨어질 수 있습니다.
- 에러 처리: 비동기 작업에서 발생하는 에러를 처리하기 어렵습니다.
재귀 함수
정의
재귀 함수(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
함수는 자기 자신을 호출하여 팩토리얼을 계산합니다.
장점
- 문제 분할: 복잡한 문제를 더 작은 하위 문제로 나누어 해결할 수 있습니다.
- 간결성: 반복문을 사용하는 것보다 코드가 더 간결해질 수 있습니다.
단점
- 스택 오버플로우: 재귀 호출이 너무 깊어지면 스택 오버플로우가 발생할 수 있습니다.
- 성능: 반복문에 비해 성능이 떨어질 수 있습니다.
주요 차이점
- 용도:
- 콜백 함수: 비동기 작업을 처리하거나, 함수를 동적으로 실행할 때 사용됩니다.
- 재귀 함수: 문제를 재귀적으로 해결할 때 사용됩니다.
- 구조:
- 콜백 함수: 다른 함수의 인자로 전달되어 실행됩니다.
- 재귀 함수: 함수 내부에서 자기 자신을 호출합니다.
- 에러 처리:
- 콜백 함수: 비동기 작업에서 에러 처리가 어렵습니다.
- 재귀 함수: 에러 처리가 비교적 단순합니다.
- 복잡성:
- 콜백 함수: 중첩된 콜백으로 인해 코드가 복잡해질 수 있습니다.
- 재귀 함수: 깊은 재귀 호출로 인해 스택 오버플로우가 발생할 수 있습니다.
결론
콜백 함수와 재귀 함수는 각각 다른 용도와 특징을 가지고 있으며, 상황에 따라 적절히 사용해야 합니다. 콜백 함수는 비동기 작업과 동적 함수 실행에 유용하며, 재귀 함수는 문제를 재귀적으로 분할하여 해결하는 데 유용합니다. 두 개념을 잘 이해하고 활용하면 JavaScript에서 더 효율적이고 가독성 높은 코드를 작성할 수 있습니다.
다음시간에 계속…
This post is licensed under CC BY 4.0 by the author.