고차함수

be kid·2022년 1월 6일
0

BEB - 웹 개발 과정

목록 보기
8/28

9일차 고차함수
(사실 내일하는 내용인데 오늘 내용이 빨리 끝나서 미리 공부했다)

자바스크립트의 함수는

  • 변수에 할당 가능
  • 다른 함수의 인자로 전달 가능
  • 다른 함수의 결과로 리턴 가능

한 일급 객체 중 하나라고 한다. First-class citizen

함수를 변수에 저장하는 방법을 함수 표현식이라 하는데, (기존에 쓰던 방식은 함수 선언식)

함수 표현식은 호이스팅이 적용되지 않는다.

  • 호이스팅
    선언된 위치에 관계없이 어디서든 함수를 사용할 수 있도록 함
    코드가 실행되는 과정에서 함수 선언부를 코드의 최상단으로 끌어올리는 것처럼 보이게 함

함수 선언식의 호이스팅에 지나치게 의존하면 코드의 유지 보수가 쉽지 않음
코드 리뷰나 디버깅을 할 때 코드 위아래로 왔다갔다 하게 될 수 있음
함수 선언식이 어느 위치에나 함수를 선언할 수 있고, 함수의 실행 위치도 중요하지 않은 반면에, 함수 표현식은 함수의 할당과 실행 위치에 따라 결과가 달라지기 때문에 코드의 위치를 어느 정도 예측할 수 있음

고차함수

-> 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수
다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 함
콜백 함수를 전달받은 고차 함수는 함수 내부에서 이 콜백 함수를 호출할 수 있음
caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있음
함수를 리턴하는 함수 : 커리 함수

배열 내장 고차함수
forEach, find, filter, map, reduce, sort, some, every 등

고차함수를 쓰는 이유

높은 수준에서 생각하기

추상화(abstraction) : 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
컴퓨터의 내부 구조에 대한 고민이 추상화로 해결되었다. 자바스크립트의 문법을 올바르게 사용하는 것만으로 다양한 프로그램을 보다 쉽게 작성할 수 있다. → 고민거리가 줄어들고 문제의 해결이 더 쉬워짐

  • 추상화 = 생산성(productivity)의 향상

자주 반복해서 사용하는 로직은 함수로 작성하기도 하는데 이 역시 추상화의 좋은 사례
추상화의 관점에서 함수를 바라보면, 함수는 사고(thought) 또는 논리(logic)의 묶음
함수를 한번 만들면 이후로는 복잡한 로직은 신경 쓰지 않고 사용할 수 있음

함수를 통해 얻은 추상화를 한 단계 더 높인 것이 고차 함수

  • 함수 = 값을 전달받아 값을 리턴한다 = 값에 대한 복잡한 로직은 감추어져 있다 = 값 수준에서의 추상화
    고차 함수는 이 추상화의 수준을 사고의 추상화 수준으로 끌어올림
  • 값 수준의 추상화 : 단순히 값(value)을 전달받아 처리하는 수준
  • 사고의 추상화 : 함수(사고의 묶음)를 전달받아 처리하는 수준
    고차 함수를 통해 보다 높은 수준(higher order)에서 생각할 수 있음
  • 고차 함수 = 함수를 전달받거나 함수를 리턴한다 = 사고(함수)에 대한 복잡한 로직은 감추어져 있다 = 사고 수준에서의 추상화

추상화의 수준이 높아지는 만큼, 생산성도 비약적으로 상승함

profile
개쩌는 개발자가 되고 싶다 !

0개의 댓글