JavaSctipt

[Javascript] 함수형 프로그래밍

판교너굴맨 2021. 7. 5. 19:48
회사 프로젝트에서 React와 Javascript, node Js를 사용하는데 누군가 나에게 '함수형 프로그래밍이 뭐야?' 라고 물어본다면 나는 자신 있게 얘기할 수 없을 거 같다.
함수형 프로그래밍에 대해 관심을 가진 김에 바로 인프런 강의를 신청해서 공부 내용을 기록하려고 한다.

0. 함수형 프로그래밍

직장 선배의 추천으로 Robert C.Martin의 Clean Code, Clean Architecture 라는 유명한 책을 읽게 되었었다.
위의 책을 참고 해서 함수형 프로그래밍에 대해 정의를 접하게 되었다.
함수형 프로그래밍은 순수 함수를 조합하여 프로그래밍 하는 기법이다.

 

순수 함수

  • 부수 효과(Side-Effect)가 없다.
  • 외부 값을 변경하지 않는다.
  • 같은 인자를 넣으면 항상 같은 값을 반환한다.

 

부수 효과 (Side Effect)

  • 함수 외부에 존재하는 값이나 상태 등을 변경하는 것
    • 함수에서 전역 변수의 값을 변경하거나 네트워크를 통해 데이터 통신을 하는 행위
  • 함수로 들어온 인자의 상태를 직접 변경하는 것

 

1. 평가와 일급

평가

  • 코드가 계산 되어 값을 만드는 것
1 + 3 //4
[1, 2 + 2] //[1, 4]
[1, 2, [3, 4] // [1, 2 [Array(2)]
[1, 2, ...[3, 4]] // [1, 2, 3, 4]

일급

  • 값으로 다룰 수 있다.
  • 변수에 담을 수 있다.
  • 함수의 인자로 사용될 수 있다.
  • 함수의 결과로 사용될 수 있다.

즉 함수는 일급이며, 값으로 다룰 수 있다.

 

2. 일급 함수

  • 함수를 값으로 다뤄질 수 있다.
  • 조합성과 추상화의 도구
const add = a => a + 5;
console.log(add) // a => a + 5
console.log(add()) // 10

const f1 = () => () => 1;
console.log(f1()) // () => 1

const f2 = f1();
console.log(f2); // () => 1
console.log(f2()) // 1

 

고차 함수

  • 함수를 값으로 다루는 함수
  • 함수를 인자로 받아서 실행하는 함수
  • 함수를 만들어 리턴하는 함수 (클로저를 만들어 리턴하는 함수)
  • 즉, 함수를 인자로 받아서 실행하거나 함수를 리턴하는 함수

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

const apply = f => f(1);
const add = a => a + 2;
console.log(apply(add)); // 3

=== const apply = f => (a => a + 2)(1);

함수를 만들어 리턴하는 함수

클로저를 만들어 리턴하기 위해 사용

  • 아래에서 고차 함수 : addMaker, 클로저 : b => a + b, add10
const addMaker = a => b => a + b;
/*
var addMaker = function addMaker(a) {
  return function (b) {
    return a + b;
  };
};
*/
const add10 = addMaker(10);

console.log(add10(5)); //15
console.log(add10(10)); //20
console.log(add)
/*
ƒ (b) {
    return a + b;
  }
*/

2021.07.06 - [JavaSctipt/함수형 프로그래밍] - Javascript 클로저 (Closure)