[JavaScript] 고차 함수 ( Higher-Order Function )

2022. 5. 18. 14:41·JavaScript
반응형

고차 함수를 이해하기 위해서는 함수형 프로그래밍이 무엇인지, 퍼스트 클래스 함수의 개념이 무엇인지

이해하는 것이 도움이 된다. 

 

함수형 프로그래밍

함수를 다른 함수의 파라미터로 넘길 수 있고, return 값으로 함수를 받을 수 있는 프로그래밍 형태이다. 

 

퍼스트 클래스 함수 

자바스크립트가 함수를 일급 시민( first-class citizen )으로 대해준다. 

왜냐하면 자바스크립트 또는 함수형 프로그래밍 언어 함수들은 전부 객체이다. 

 

자바스크립트에서, 함수는 Function 객체라는 특별한 타입이다. 

function special () {
	console.log("hello");
}

special();

special.test = "!?";

console.log(special.test);
// !?

자바스크립트에서 함수가 객체인 것을 증명하기 위해서 다음과 같은 방식으로 코드를 작성할 수 있다. 

 

※ 작성할 수 있는 거지만 사용하는 것을 추천하진 않는다.

 

함수를 변수에 할당하기 

자바스크립트에서 함수를 변수에 할당할 수 있다. 

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

square(5);

함수를 파라미터로 넘기기

마찬가지로 함수를 파라미터로 넘길 수 있다. 

function first() {
	console.log("first");
}

function second() {
	console.log("second");
}

function third(type, first, second) {
    if(type === "first")
    	first()
    else if(type === "second")
    	second()
}

 

정리하자면, 

함수 자체를 인자로써 다른 함수에 전달하거나 다른 함수의 결과값으로 리턴할 수 있고, 함수를 변수에 할당하거나 

데이터 구조안에 저장할 수 있는 함수이다. 

 

고차 함수 ( Higher-Order Function )

함수를 인자로 받거나 함수를 반환함으로 작동하는 함수를 말한다. 

즉, 고차 함수는 함수를 인자로 받거나 함수를 출력으로 반환하는 함수를 말한다. 

 

예를 들어, Array.prototype.map, Array.prototype.filter 와 Array.prototype.reduce가 언어 내부에 포함된

고차 함수이다.

 

고차 함수의 동작 

Array.prototype.map

map() 메서드는 입력으로 들어온 배열 내 모든 엘리먼트를 인자로 제공받는 콜백 함수를 호출함으로 새로운 배열을 

만들어 낸다. 

 

map() 메서드의 콜백 함수에서 모든 반환된 값을 가져와 값을 이용한 새로운 배열을 만들어낸다. 

 

예)

고차 함수가 아닌 함수로 작성

const arr1 = [1, 2, 3];
const arr2 = [];

for(let i =0; i < arr1.length; i++) {
	arr2.push(arr1[i] * 2);
}

console.log(arr2);

 

고차 함수로 작성

const arr1 = [1, 2, 3];
const arr2 = arr1.map(item => item * 2);

console.log(arr2);

 

Array.prototype.filter 

filter() 메서드는 콜백 함수에 의해 제공된 테스트를 통과한 모든 엘리먼트를 가진 새로운 배열을 만들어 낸다. 

 

예)

고차 함수가 아닌 함수로 작성

const persons = [
  { name: 'Peter', age: 16 },
  { name: 'Mark', age: 18 },
  { name: 'John', age: 27 },
  { name: 'Jane', age: 14 },
  { name: 'Tony', age: 24},
];

const fullAge = [];

for(let i = 0; i < persons.length; i++) {
  if(persons[i].age >= 18) {
    fullAge.push(persons[i]);
  }
}

console.log(fullAge);

고차 함수로 작성

const persons = [
  { name: 'Peter', age: 16 },
  { name: 'Mark', age: 18 },
  { name: 'John', age: 27 },
  { name: 'Jane', age: 14 },
  { name: 'Tony', age: 24},
];
const fullAge = persons.filter(person => person.age >= 18);
console.log(fullAge);

 

Array.prototype.reduce

reduce() 메서드는 호출하는 배열의 각각의 멤버에 대해서 콜백 함수를 실행하고 하나의 결과값만 보낸다. 

 

예)

고차 함수가 아닌 함수로 작성

const arr = [5, 7, 1, 8, 4];

let sum = 0;

for(let i = 0; i < arr.length; i++) {
	sum = sum + arr[i];
}

console.log(sum);

고차 함수로 작성

const arr = [5, 7, 1, 8, 4];

const sum = arr.reduce(function(accumulator, currentValue) {
	return accumulator + currentValue;
});

console.log(sum);

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'JavaScript' 카테고리의 다른 글

[JavaScript] 콜스택  (1) 2022.06.04
[JavaScript] 제너레이터와 이터레이터  (4) 2022.05.20
[JavaScript] ES6에서의 순회와 이터러블  (2) 2022.05.19
[JavaScript] 함수 ( 선언 ) 형 프로그래밍  (3) 2022.05.17
[JavaScript] for문과 forEach문 차이  (0) 2022.04.25
'JavaScript' 카테고리의 다른 글
  • [JavaScript] 제너레이터와 이터레이터
  • [JavaScript] ES6에서의 순회와 이터러블
  • [JavaScript] 함수 ( 선언 ) 형 프로그래밍
  • [JavaScript] for문과 forEach문 차이
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    네트워크
    webpack
    Babel
    자바스크립트
    next.js
    바질 키우기
    리얼학습일기
    타입스크립트
    덤프
    CCNA
    타일러영어
    리액트
    ReactNative
    프로그래머스
    리얼클래스
    Docker
    알고리즘
    javascript
    네이버 부스트캠프
    영어회화
    typescript
    ChatGPT
    바질
    Node.js
    식물
    다이소
    영어독학
    react
    CSS
    redux
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[JavaScript] 고차 함수 ( Higher-Order Function )
상단으로

티스토리툴바