p r o g r a m m i n g

고차함수

hee.hee 2022. 5. 24. 21:50

일급객체 조건

  • 변수에 할당(assignment) 할 수 있다.
  • 다른 함수의 전달인자(argument)로 전달될 수 있다.
  • 다른 함수의 결과로서 리턴될 수 있다.

-> 자바스크립트에서 함수는 일급객체이다.

함수는 변수에 저장된 데이터를 전달 인자로 받거나, 리턴 값으로 사용할 수 있습니다.

함수도 변수에 저장될 수 있기 때문에 함수를 인자로 받거나, 리턴 값으로 사용할 수 있습니다.

 

 

 

고차 함수(higher order function)

함수를 전달인자(argument)로 받을 수 있고, 함수를 리턴할 수 있는 함수.

  • 다른 함수를 인자로 받는 경우
  • 함수를 리턴하는 경우
  • 함수를 인자로 받고, 함수를 리턴하는 경우

 

콜백함수
함수의 전달인자로 전달되는 함수.
필요할 때 호출(called back)해서 사용할 수 있다.
일단 전달되고, 함수 내부에서 필요할 때 쓰는 함수

 

 

 
 

 

 

 

내장 고차함수 


filter : 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환

  • 배열의 각 요소가
  • 특정 논리(함수)에 따르면, 사실(true)일 때
  • 따로 분류합니다(filter)
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]

 

 

 

map: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환

  • 배열의 각 요소가
  • 특정 논리(함수)에 의해
  • 다른 요소로 지정(map) 됩니다.
const array1 = [1, 4, 9, 16];

// pass a function to map
const map1 = array1.map(x => x * 2);

console.log(map1);
// expected output: Array [2, 8, 18, 32]

 

 

 

reduce: 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환

  • 배열의 각 요소를
  • 특정 방법(함수)에 따라
  • 원하는 하나의 형태로
  • 응축합니다. (reduction)

배열.reduce(실행함수,초기값)

실행함수는 반복할 파라미터 필요

// 단행본 모음
const cartoons = [
  {
    id: 1,
    bookType: 'cartoon',
    title: '식객',
    subtitle: '어머니의 쌀',
    createdAt: '2003-09-09',
    genre: '요리',
    artist: '허영만',
    averageScore: 9.66,
  },
  {
    id: 2,
    // .. 이하 생략
  },
  // ... 이하 생략
];

// 단행본 한 권의 평점을 누적값에 더한다.
const scoreReducer = function (sum, cartoon) {
  return sum + cartoon.averageScore;
}; 

// 초기값에 0을 주고, 숫자의 형태로 평점을 누적한다.
let initialValue = 0 
// 모든 책의 평점을 누적한 평균을 구한다.
const cartoonsAvgScore = cartoons.reduce(scoreReducer, initialValue) / cartoons.length;

배열을 문자열로 바꿈

function joinName(resultStr, user) {
  resultStr = resultStr + user.name + ', ';
  return resultStr;
}

let users = [
  { name: 'Tim', age: 40 },
  { name: 'Satya', age: 30 },
  { name: 'Sundar', age: 50 }
];

users.reduce(joinName, '');

 

 

 

 

 

 

 

추상화


복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
추상화를 통해 생산성(productivity)을 향상시킬 수 있고, 추상화의 수준이 높아질 수록 생산성이 증가한다.
소프트웨어 시스템을 효율적으로 다룰 수 있다.

추상화의 종류

  • 값 수준의 추상화: 단순히 값(value)을 전달받아 처리하는 수준
  • 사고의 추상화: 함수(사고의 묶음)를 전달받아 처리하는 수준