S2_U1_CH1. 고차함수

Judevv·2023년 5월 11일
0

Chapter 1. 고차함수

학습 목표

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

1-1. 일급 객체

  • JavaScript에서 특별('일(등)급') 대우를 받는 객체
  • 대표적인 객체 중 하나는 함수!
    • JavaScript에서 모든 것은 객체(Object)인데, 함수 같은 객체는 일반적인 객체와는 다르게 동등한 지위를 가짐
      • 예를 들면, 함수는 변수에 저장할 수 있고, 저장된 함수는 호출될 수 있고, 이를 통해서 함수 내부에 작성된 코드 실행(일반적인 객체에는 적용할 수 없는 것)
      • 배열, 객체, 정규표현식 도 일급 객체로 취급됨
      • 함수를 데이터(문자열, 숫자, 불리언 등)처럼 다룰 수 있음
  • 대표적인 특징
    • 변수에 할당(assignment)할 수 있음
      • 변수나 데이터 구조안에 저장할 수 있다는 뜻!
      • 배열의 요소나 객체의 속성 값으로도 저장할 수 있음(⭐️)
    • 다른 함수의 전달인자(argument)로 전달될 수 있음
      • 매개변수로 전달할 수 있다는 뜻!
    • 다른 함수의 결과로써 리턴될 수 있음
      • 반환값으로 사용할 수 있다는 뜻!

1-2. 고차 함수의 이해

  • 함수를 매개변수(전달인자:argument)로 받거나, 함수를 반환하는 함수

    • 함수는 변수에 저장할 수 있고, 함수는 함수를 담은 변수를 전달인자로 받을 수 있고, 함수 내부에서도 변수에 함수를 할당할 수 있고, 함수는 이 변수를 반환할 수 있음
    • 여기서 변수에 할당하지 않고 함수를 바로 이용할 수 있음(변수가 빠졌을 뿐 동일하게 동작함!)

  • 콜백함수(callback function)

    • 다른 함수(caller)의 전달인자(argument)로 전달되는 함수
    • 어떤 조건에 따라서 호출될 수도 있고, 호출되지 않을 수도 있음!

  • 커링 함수

    • 함수를 리턴하는 함수!!
    • 함수를 전달인자로 받는 함수에만 한정해서 사용하기도 함
    • 정확하게 구분하면 고차함수가 커링 함수를 포함
// 다른 함수를 인자로 받는 경우 예제

  function add(a, b) {
  return a + b;
}

function calculate(a, b, operation) {
  const result = operation(a, b);
  console.log(result);
} 
// 두 개의 숫자와 다른 함수를 인자로 받음
// 인자로 받은 operation 함수를 호출해서 a + b 결과 출력
// add 함수operation이 콜백함수

calculate(5, 3, add); // 8 출력
// 함수를 리턴하는 고차함수 예제
function createMultiplier(multiplier) {
  return function(number) {
    return number * multiplier;
  }
} // 인자로 전달된 multiplier 값을 받아서, 이 값을 사용하는 새로운 함수를 반환
// 반환된 함수는 내부적으로 multiplier 값을 이용해서 전달받은 number 값을 곱한 결과를 반환

const double = createMultiplier(2);
const triple = createMultiplier(3);

console.log(double(5)); // 10
console.log(triple(5)); // 15
// 함수를 인자로 받고, 함수를 리턴하는 예제
function double(func) {
  return function(num) {
    return func(num * 2);
  }
} // double 함수는 함수를 인자로 받으며, num에 2를 곱한 값을 해당 함수에 전달하여 리턴
// double 함수 내부에서는 인자로 전달받은 함수(func)에 해당 값을 전달하여 실행

function square(num) {
  return num * num;
} // 인자로 받은 수의 제곱 결과 리턴

const doubleSquare = double(square); // doubleSquare 변수에 double 함수에 square 함수를 인자로 전달하여 리턴받은 함수를 할당
console.log(doubleSquare(5)); // 100
// double 함수 내부에서 square 함수에 5 * 2인 10을 전달하고, square 함수는 이 값을 제곱한 100을 리턴
profile
감성있는 개발자를 꿈꿔요

0개의 댓글