[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
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계