ESLint 규칙 중 max-nested-callbacks 란?
프로그래밍에서 콜백(callback)은 비동기 작업을 처리하거나 함수를 인자로 전달할 때 자주 사용하는 패턴입니다. 하지만 콜백을 중첩해서 사용하는 경우 코드가 복잡해져서 가독성이 떨어지거나 디버깅이 어려워질 수 있습니다. 이러한 문제를 해결하기 위해 ESLint는 코드의 복잡성을 관리하기 위한 여러 규칙을 제공하는데, 그중 하나가 바로 max-nested-callbacks
규칙입니다.
max-nested-callbacks 규칙이란?
max-nested-callbacks
규칙은 코드에서 콜백 함수의 중첩 수준을 제한하는 ESLint 규칙입니다. 이 규칙은 콜백이 너무 깊게 중첩되는 것을 방지하여 코드를 더 이해하기 쉽게 만들어 줍니다. 특히 비동기 작업이 많은 JavaScript 코드를 다룰 때 중첩 콜백에 의한 이른바 "콜백 지옥(callback hell)"을 예방하는 데 효과적입니다.
다음은 잘못된 중첩 콜백의 예입니다:
// 콜백이 과도하게 중첩된 예시
function fetchData(callback) {
setTimeout(() => {
processData((data) => {
transformData(data, (result) => {
console.log(result);
});
});
}, 1000);
}
위 코드는 콜백 함수가 깊이 중첩되어 있어, 코드를 이해하고 유지보수하는데 큰 어려움을 겪게 될 수 있습니다.
max-nested-callbacks 규칙의 동작 방식
ESLint에서 max-nested-callbacks
규칙은 기본적으로 두 가지를 설정할 수 있습니다:
-
최대 중첩 단계 설정: 기본적으로 콜백이 몇 단계까지 중첩될 수 있는지 정할 수 있습니다. 일반적으로 3단계 이하로 제한하는 것이 좋습니다.
-
가독성 향상: 콜백이 중첩되지 않도록 코드 구조를 개선하여 가독성을 높일 수 있습니다.
이 규칙은 설정된 중첩 수준을 초과할 경우 ESLint가 경고를 발생시킵니다.
올바른 사용 방법
콜백의 중첩을 줄이기 위해서는 다음과 같은 방법을 사용할 수 있습니다:
-
Promise 사용: 비동기 작업을 처리할 때 콜백 대신 Promise를 사용하면 중첩 문제를 쉽게 해결할 수 있습니다.
-
async/await 사용: 최신 JavaScript 문법인
async/await
를 사용하여 비동기 코드를 보다 직관적으로 작성할 수 있습니다. -
함수 분리: 각 단계의 콜백을 개별적인 함수로 분리하여 중첩을 피할 수 있습니다.
아래는 Promise를 사용한 예시입니다:
// Promise를 사용한 예시
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('data');
}, 1000);
});
}
fetchData()
.then(processData)
.then(transformData)
.then(console.log);
ESLint에서 max-nested-callbacks 규칙 설정
max-nested-callbacks
규칙은 ESLint 설정 파일에서 쉽게 적용할 수 있습니다. .eslintrc 파일에 다음과 같이 설정할 수 있습니다:
{
"rules": {
"max-nested-callbacks": ["error", 3]
}
}
위 설정은 콜백 함수가 3단계 이상 중첩되지 않도록 제한합니다.
결론
max-nested-callbacks
규칙은 코드에서 중첩된 콜백을 제한하여 가독성과 유지보수성을 개선하는 유용한 ESLint 규칙입니다. JavaScript 코드를 작성할 때 비동기 작업은 필수적이기 때문에, 이 규칙을 통해 콜백 중첩 문제를 사전에 방지하고 쉬운 유지보수를 위한 구조를 설계해 보세요. Promise
나 async/await
같은 현대적인 JavaScript 문법을 활용하여 코드를 간결하고 명확하게 작성할 수 있습니다.