9일차 고차함수
(사실 내일하는 내용인데 오늘 내용이 빨리 끝나서 미리 공부했다)
자바스크립트의 함수는
한 일급 객체 중 하나라고 한다. First-class citizen
함수를 변수에 저장하는 방법을 함수 표현식이라 하는데, (기존에 쓰던 방식은 함수 선언식)
함수 표현식은 호이스팅이 적용되지 않는다.
함수 선언식의 호이스팅에 지나치게 의존하면 코드의 유지 보수가 쉽지 않음
코드 리뷰나 디버깅을 할 때 코드 위아래로 왔다갔다 하게 될 수 있음
함수 선언식이 어느 위치에나 함수를 선언할 수 있고, 함수의 실행 위치도 중요하지 않은 반면에, 함수 표현식은 함수의 할당과 실행 위치에 따라 결과가 달라지기 때문에 코드의 위치를 어느 정도 예측할 수 있음
-> 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수
다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 함
콜백 함수를 전달받은 고차 함수는 함수 내부에서 이 콜백 함수를 호출할 수 있음
caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있음
함수를 리턴하는 함수 : 커리 함수
배열 내장 고차함수
forEach, find, filter, map, reduce, sort, some, every 등
높은 수준에서 생각하기
추상화(abstraction) : 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
컴퓨터의 내부 구조에 대한 고민이 추상화로 해결되었다. 자바스크립트의 문법을 올바르게 사용하는 것만으로 다양한 프로그램을 보다 쉽게 작성할 수 있다. → 고민거리가 줄어들고 문제의 해결이 더 쉬워짐
자주 반복해서 사용하는 로직은 함수로 작성하기도 하는데 이 역시 추상화의 좋은 사례
추상화의 관점에서 함수를 바라보면, 함수는 사고(thought) 또는 논리(logic)의 묶음
함수를 한번 만들면 이후로는 복잡한 로직은 신경 쓰지 않고 사용할 수 있음
함수를 통해 얻은 추상화를 한 단계 더 높인 것이 고차 함수
추상화의 수준이 높아지는 만큼, 생산성도 비약적으로 상승함