# FP

> 순수 함수를 조합하여 프로그래밍하는 방식
>
> (절차지향 프로그래밍, 객체지향 프로그래밍과 대조)

#### 프로그래밍 방식

* 명령형 프로그래밍: 어떻게에 중점
  * 절차지향 프로그래밍: 순차적 처리
  * 객체지향 프로그래밍: 객체 집합이 서로 상호작용하여 처리
* 선언형 프로그래밍: 무엇에 중점
  * 함수형 프로그래밍: 순수함수를 조합하여 처리

#### 함수형 프로그래밍의 특징

* 데이터는 불변하다
* 문제를 함수로 분해하여 해결
* 조건문/반복문 지원안함

#### 불변성

* 함수 밖에 있는 데이터를 변경하지 않음
* 함수의 반환 값은 함수 내에서 수행된 작업만
* Side Effect 방지 → 함수 내부 동작으로 인해 외부에 영향 안줌

#### 순수 함수

* 입력 매개변수에만 의존, Side Effect 발생안함

#### 유지 보수의 용이성

* Side Effect가 발생하지 않으면 유지 보수에 용이

#### 선언형 함수

* 무엇을 할지에 중점

  ```tsx
  // 명령형
  const arr = [1,2,3,4,5];
  function calculator(value) {
  	for (let i = 0; i <= arr.length; i++) {
  		arr[i] = arr[i] * value;
  	}
  }

  // 선언형
  function calculator(arr, value) {
  	return arr.map((num) => num * value);
  }
  ```
