노트 #27 | 고차 함수 (Higher-order Function; Caller)

HyeonWooGa·2022년 7월 21일
0

노트

목록 보기
28/74

개요

일급 객체와 고차 함수 개념에 대해 학습합니다.


학습 목표

  • 일급 객체(first-class citizen)의 세 가지 특징을 설명할 수 있다.
  • 고차 함수(higher-order function)에 대해 설명할 수 있다.
  • 고차 함수를 자바스크립트로 작성할 수 있다.

일급 객체

비행기 'first-class' 같이 JavaScript 에도 특별한 대우를 받는 'first-class citizen'이 있습니다.

  • 대표적인 일급 객체 중 하나는 함수입니다.
    • 변수에 할당(assignment) 할 수 있다.
    • 다른 함수의 전달인자(argument)로 전달될 수 있다.
    • 다른 함수의 결과로서 리턴될 수 있다.

변수에 함수를 할당하는 경우

  • 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있습니다.
  • 함수를 데이터처럼 다룰 수 있습니다.
  • 예시
// 함수 표현식

const square = function (num) {
  return num * num;
};

//// 변수 square에는 함수가 할당되어 있으므로, 함수 호출 연산자 '()' 를 사용할 수 있습니다.
const output = square(7);
console.log(output); // 49

// 화살표 함수

const square = (num) => {
  return num * num;
};

//// 변수 square에는 함수가 할당되어 있으므로, 함수 호출 연산자 '()' 를 사용할 수 있습니다.
const output = square(7);
console.log(output); // 49

// 함수 선언식은 위의 예에 해당하지 않습니다.

고차 함수

  • 개요
    • 함수를 리턴하는 함수 (커링함수)
    • 함수를 전달인자로 받는 함수
    • 위 두 가지 정의를 모두 포함한 함수를 고차 함수라고 부르겠습니다.
    • 고차 함수(Caller)는 함수 내부에서 이 콜백 함수를 호출(Invoke)할 수 있고, 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있습니다.

  • 예시 - 다른 함수를 인자로 받는 경우
function double(num) {
  return num * 2;
}

function doubleNum(func, num) {
  return func(num)
}

let output = doubleNum(double, 4);
console.log(output); // 8
  • 예시 - 함수를 리턴하는 경우
function adder(added<num>) {
  return function (num)
    return num + added;
}

let output = adder(5)(3);
console.log(output); // 8

const add3 = adder(3);
output = add3(2);
console.log(output); // 5
  • 예시 - 함수를 인자로 받고, 함수를 리턴하는 경우
function double(num) {
  return num * 2;
}

function doubleAdder(added<num>, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  }
}

let output = doubleAdder(5, double)(3); 
console.log(output); // 13

const addTwice3 = doubleAdder(3, double);
output = addTwice3(2);
console.log(output); // 8

profile
Aim for the TOP, Developer

0개의 댓글