함수형 프로그래밍이란? (What is FP?)

somedaycode·2021년 1월 19일
0
post-thumbnail

함수형 프로그래밍 (Functional Programming, FP)

또 다른 프로그래밍 패러다임 중 하나이다.

함수가 하나의 일만 하도록 잘게 나눈다.

이를 통해 테스트를 쉽게 할 수 있으며, 소프트웨어 변경에 대한 영향을 최소한으로 줄일 수 있다.

특징을 살펴보자

순수 함수 (pure function)

  • 순수함수는 같은 입력에 대해 항상 같은 값을 출력한다!
  • 순수 함수는 부수 효과(Side-effct)이 없다.
  • 함수 외부의 영향을 받지 않는다.

불변성

값이 변경되지 않는다.

참조투명성

함수 외부의 값을 변경하거나, 외부 세계의 의존적이지 않은 코드를 가리켜 "참조투명성"이라고 말한다.

이러한 특징들로 입력값에 대한 결과를 쉽게 예측할 수 있다.
또, 문제가 생겼을 때 바로 알 수 있다는 이점이 있다.

고계 함수 (higher-order function)

쉽게 말해, 함수를 다루는 함수이다.

고계 함수는 함수를 인자로 전달받아 함수를 결과로 반환한다.

자바스크립트의 함수는 일급 객체로 변수에 담아 인자로 전달, 반환이 가능하다.

const calc = (a, b, mul) => mul(a, b);
const multiplier = (a, b) => a * b;

// calc 함수는 multiplier 라는 함수를 인수로 받는다.
console.log(calc(5, 9, multiplier)); // 45

/**
 * 위 함수를 차례대로 보면,
 * calc(5, 9, multiplier)
 * multiplier(5, 9)
 * 5 * 9
 */

자바스크립트에서는 map, filter, reduce와 같은 고계 함수를 이용해 빈번한 forwhile의 사용을 줄일 수 있다.

// map
const arr = [1, 2, 3, 4, 5];
const result = arr.map((n) => n * 2);
console.log(result); // [ 2, 4, 6, 8, 10 ]

//filter - 조건에 맞는 값을 return한다.
const arr = [1, 2, 3, 4, 5];
const result = arr.filter((n) => n > 2);
console.log(result); // [ 3, 4, 5 ]

//reduce - 간단하게 배열에 있는 모든 값을 더 할 수 있다.
const arr = [1, 2, 3, 4, 5];
const result = arr.reduce((prev, curr) => (prev += curr), 0);
console.log(result); // 15

일급 객체(일급 시민)란? (What is 'First Class Object'?)

컴퓨터 프로그래밍 언어에서 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. - 위키백과

다음의 조건을 만족한다.

  • 매개변수가 될 수 있다.
  • 변수나 데이터에 담을 수 있다.
  • 비교의 대상이 될 수 있다.
profile
천천히 꾸준히

0개의 댓글