TIL 16 | 고차함수

hyuk(정윤혁)·2021년 8월 10일
0

Today I Learned

목록 보기
16/38
post-thumbnail

고차함수란?

  • 고차 함수(higher order function)는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수다. 함수는 변수에 저장할 수 있다. 그리고 함수는, 함수를 담은 변수를 인자로 전달받을 수 있다. 마찬가지로, 함수 내부에서 변수에 함수를 할당할 수 있다. 그리고 함수는 이 변수를 리턴할 수 있다. 여기서 변수에 할당하지 않고 함수를 바로 이용할 수 있다. 어떤 고차 함수에 함수를 인자로 전달하고, 고차 함수는 함수 자체를 리턴한다. 변수가 빠졌을 뿐, 동일하게 동작한다.

map

  1. 배열의 각 요소가
  2. 특정 논리(함수)에 의해
  3. 다른 요소로 지정(map) 된다.

예시 문제

만화책 식객 27권의 정보가 배열에 담겨있습니다. 각 책의 부제(subtitle)만 담은 배열을 만드세요.

수도코드

  1. 배열의 각 요소 : 각 식객 1- 27권의 정보
  2. 특정 논리(함수) : 책 한 권의 부제를 찾습니다.
  3. 다른 요소로 지정 : 각 식객 1- 27권의 부제

코드

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

const findSubtitle = function (cartoon) {
  return cartoon.subtitle;
}; // 만화책 한 권의 제목을 리턴하는 로직(함수)

const subtitles = cartoons.map(findSubtitle); // 각 책의 부제 모음
  • map은 이렇게 하나의 데이터를 다른 데이터로 맵핑(mapping) 할 때 사용한다.

filter

  1. 배열의 각 요소가
  2. 특정 논리(함수)에 따르면, 사실(boolean)일 때
  3. 따로 분류합니다(filter).

예시 문제

만화책 식객 27권의 정보가 배열에 담겨있습니다. 출판년도가 2003년인 단행본만 담은 배열을 만드세요.

수도코드

  1. 배열의 각 요소 : 각 식객 1- 27권의 정보
  2. 특정 논리(함수) : 책의 출판년도가 2003년입니다. (true / false)
  3. 따로 분류 : 출판년도가 2003년인 책의 정보

코드

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

const isCreatedAt2003 = function (cartoon) {
  const fullYear = new Date(cartoon.createdAt).getFullYear()
  return fullYear === 2003;
}; // 단행본 한 권의 출판판년도가 2003인지 확인하는 함수

const filteredCartoons = cartoons.filter(isCreatedAt2003); // 출판년도가 2003년인 책의 모음
  • filter는 이렇게 조건에 맞는 데이터만 분류(filtering) 할 때 사용합니다.

reduce

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

예시 문제

만화책 식객 27권의 정보가 배열에 담겨있습니다. 각 단행본의 평점의 평균을 리턴하세요.

수도코드

  1. 배열의 각 요소 : 각 식객 1- 27권의 정보
  2. 응축하는 방법 (함수) : 각 단행본의 평점을 누적값에 더합니다.
  3. 원하는 형태 : 숫자로 누적합니다.
  4. 응축된 결과 : 각 단행본의 평점의 합을 단행본의 길이로 나눈 평점의 평균

코드

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;
}; // 단행본 한 권의 평점을 누적값에 더한다.

let initialValue = 0 // 숫자의 형태로 평점을 누적한다.
const cartoonsAvgScore = cartoons.reduce(scoreReducer, initialValue) / cartoons.length;
// 모든 책의 평점을 누적한 평균을 구한다.
  • reduce는 이렇게 여러 데이터를, 하나의 데이터로 응축(reduce)할 때 사용합니다.
profile
노션 저장소는 🏠홈버튼 눌러주세요 !

0개의 댓글