[TIL/모던 자바스크립트 Deep Dive] 2023/05/24
12장. 함수 12-7. 다양한 함수의 형태(이어서...) > 중첩 함수 함수 내부에 정의된 함수를 라 한다. 중첩 함수를 포함하는 함수는 라 부른다. 중첩 함수는 외부 함수 호출할 수 있다. > 콜백 함수 특정 작업을 반복 수행하는 repeat 함수를 정의
12장. 함수
12-7. 다양한 함수의 형태(이어서...)
중첩 함수
함수 내부에 정의된 함수를 ``중첩 함수(nested function) 또는 내부 함수(inner function)`라 한다. 중첩 함수를 포함하는 함수는 `외부 함수(outer function)`라 부른다. 중첩 함수는 외부 함수 `내부에서만`` 호출할 수 있다.

콜백 함수
특정 작업을 반복 수행하는 repeat 함수를 정의해 봤다.

repeat 함수는 console.log(i)에 강하게 의존하고 있어 다른 작업을 수행할 수 없다. 만약 repeat 함수의 반복문 내부에서 다른 일을 하고 싶다면, 함수를 새롭게 정의해야 한다.

위 예제의 함수들은, 반복하는 일의 '내용'만 다르다. 함수의 일부분만이 다른데 매번 함수를 새롭게 정의해야 한다. 함수의 변하지 않는 공통 로직은 미리 정의해 두고, 경우에 따라 변경되는 로직은 추상화해서 함수 외부에서 함수 내부로 전달하는 '함수 합성'이 해당 문제를 해결할 수 있다.

repeat 함수는 더 이상 내부 로직에 강력히 의존하지 않고 외부에서 로직의 일부분을 함수로 전달받아 수행하므로, 더욱 유연한 구조를 갖게 되었다.
함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 ``콜백 함수(callback function)`라고 하며, 매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수를 `고차 함수(Higher-Order Function, HOF)``라고 한다.
'중첩 함수'와 '콜백 함수'는 모두 헬퍼 함수로서의 역할을 한다. 다만, 중첩 함수는 고정되어 있기에 교체가 곤란하지만, 콜백 함수는 함수 외부에서 고차 함수로 주입하기 때문에 자유롭게 교체할 수 있다는 차이가 있다. 즉, 고차 함수는 콜백 함수를 자신의 일부분으로 합성한다.
콜백 함수는 고차 함수에 의해 호출되는데, 이때 고차 함수는 필요에 따라 콜백 함수에 인수를 전달할 수 있다. 따라서 고차 함수에 콜백 함수를 전달할 때 콜백 함수를 호출하지 않고 함수 자체를 전달해야 한다. 콜백 함수가 고차 함수 내부에서만 호출된다면, 콜백 함수를 익명 함수 리터럴로 정의하면서 곧바로 고차 함수에 전달하는 것이 일반적이다.

콜백 함수를 다른 곳에서도 호출할 필요가 있거나, 콜백 함수를 전달받는 함수가 자주 호출된다면 함수 외부에서 콜백함수를 정의하고 '함수 참조'를 고차 함수에 전달하는 편이 효율적이다.

콜백 함수는 함수형 프로그래밍 패러다임뿐만 아니라 비동기 처리에 활용되는 중요한 패턴이다.

콜백 함수는 비동기 처리뿐 아니라 배열 고차 함수에서도 사용된다. 가볍게 살펴봤다. 자세한 내용은 27장에서 다룬다고 한다.

More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니