본문 바로가기
JavaScript/함수형 프로그래밍

함수형 자바스크립트 기본기 정리

by Vintz 2021. 10. 3.
반응형

함수형 자바스크립트에서의 기본기

평가란?

  • 코드가 계산(Evaluation) 되어 값을 만드는 것
// 🌱 평가(Evaluation)하기
const log = console.log;

log(1); // 1로 평가
log(1 + 2); // 3으로 평가
log(3 + 4); // 7로 평가
log([1, 2]); // 배열 [1, 2]로 평가
log([1, 2 + 3]); // 배열 [1, 5]로 평가
log([1, 2, [3, 4]]); // 배열 [1, 2, [3, 4]]로 평가
log([1, 2, ...[3, 4]]); // 배열 [1, 2, 3, 4]로 평가

일급이란?

  • 값으로 다룰 수 있다.
  • 변수에 담을 수 있다.
  • 함수의 인자로 사용될 수 있다.
  • 함수의 결과로 사용될 수 있다.
// 🌱 일급이란?
// 값으로 다룰 수 있다. 따라서
const a = 10; // 변수에 담을 수 있고
const add10 = a => a + 10; // 함수의 인자로, 함수의 결과(20 리턴)로 사용될 수 있다.
const r = add10(a);

console.log(r); // 20

일급 함수란?

  • 함수를 값으로 다룰 수 있다.
  • 조합성과 추상화의 도구
// 🌱 일급 함수란?
const log = console.log;

// 함수를 값으로 다룰 수 있다. 따라서
// 1. 변수에 담을 수 있다.
const add5 = a => a + 5; 

// 2. 함수(log)의 인자로 함수(add5)가 사용될 수 있다. 
log(add5); // a => a + 5

// 3. 평가한 후 결과로 만들어서(10) 다른 함수(log)에 전달할 수 있다.
log(add5(5)); // 10

// 4. 함수의 결과값으로 함수가 사용될 수 있다.
// f1이라는 함수를 실행했을 때, 다시 함수를 리턴할 수 있다.
const f1 = () => () => 1;
log(f1()); // () => 1

// 5. 다른 변수에 담을 수 있다.
const f2 = f1();
log(f2); // () => 1

// 6. 원하는 시점에 평가를 할 수 있다.
log(f2()); // 1

고차 함수란?

  • 일급 함수의 개념을 이용하여 함수를 값으로 다루는 함수
  • 크게 두 가지의 고차 함수가 있다.

1. 함수를 인자로 받아서 실행하는 함수

  • apply1
  • times
// 🌱 apply1 고차 함수
const log = console.log;
// 함수가 함수를 받아서 내부에서 실행 됨 -> 함수를 인자값으로 받는다.
const apply1 = f => f(1);
const add2 = a => a + 2;

log(apply1(add2)); // 3
// apply1 함수는 add2 함수를 인자로 받아서
// 내부에서 실행했다. -> (a => a + 2)(1)

// 🌱 times 고차 함수
const times = (f, n) => {
  let i = -1;
  while (++i < n) {
    f(i);
  }
};

times(log, 3);
// 0
// 1
// 2
times(a => log(a + 10), 3);
// 10
// 11
// 12

// times 함수는 함수를 값으로 받고(f), 다른 값도(n) 받아서
// 내부에서 실행했다. -> (console.log)(i), (a => log(a + 10))(i)
// times 함수같은 경우 내부에서 실행하면서 원하는 인자를 적용하는 함수이다.
// 이러한 프로그래밍을 Applicative programming이라고도 한다.

2. 함수를 만들어 리턴하는 함수 (클로저를 만들어 리턴하는 함수)

  • addMaker
// 🌱 addMaker 고차 함수
const log = console.log;
const addMaker = a => b => a + b;
const add10 = addMaker(10);

log(add10); // b => a + b, 함수가 실행되었을 때, 함수가 리턴되었다.
log(add10(5)); // 15
log(add10(10)); // 20

위의 addMaker 함수에서 b => a + b 함수에서 a(10)의 값을 기억하고 있다. 해당 함수가 만들어질 때의 환경인 a와 함수 b => a + b 자체의 객체의 조합을 클로저라고 한다. 

 

따라서 addMaker 함수는 클로저를 리턴하는 함수이며, 함수가 함수를 만들어 리턴할 때는 결국 클로저를 만들어 사용하게 된다.


함수형 프로그래밍과 JavaScript ES6+

 

함수형 프로그래밍과 JavaScript ES6+ - 인프런 | 강의

ES6+와 함수형 프로그래밍을 배울 수 있는 강의입니다. 이 강좌에서는 ES6+의 이터러블/이터레이터/제너레이터 프로토콜을 상세히 다루고 응용합니다. 이터러블을 기반으로한 함수형 프로그래밍,

www.inflearn.com

반응형

'JavaScript > 함수형 프로그래밍' 카테고리의 다른 글

일급 함수  (0) 2021.09.21
순수 함수  (0) 2021.09.20