[FP] 함수형 프로그래밍, 순수함수, 일급함수

어느 개발자·2022년 2월 28일
0

함수형 프로그래밍

함수형 프로그래밍을 알아보기 전에 성공적인 프로그래밍에 대해서 생각해보자.

성공적인 프로그래밍

  • 모든 프로그래밍 패러다임은 성공적인 프로그래밍을 위해 존재한다.
  • 성공적인 프로그래밍은 좋은 프로그램을 만드는 일이다.
  • 좋은 프로그램은 사용성, 성능, 확장성, 기획 변경에 대한 대응력이 좋다.
  • 이것들을 효율적이고 생산적으로 이루는 일이 성공적인 프로그래밍이다.

함수형 프로그래밍은 성공적인 프로그래밍을 위해 부수 효과를 미워하고, 조합성을 강조하는 프로그래밍 패러다임이다.

  • 부수 효과를 미워한다 -> 순수함수를 만든다.
  • 조합성을 강조한다 -> 모듈화 수준을 높인다.
  • 순수함수 -> 오류를 줄이고 안정성을 높인다.
  • 모듈화 수준이 높다 -> 생산성을 높인다.

순수함수

순수함수란 부수 효과가 없는 함수를 말한다.

순수함수의 특징

  • 들어온 인자가 같다면 항상 같은 값을 반환한다.
  • 외부의 상태에 영향을 끼치지 않는 함수이다.
  • 리턴 값 외에는 외부와 소통하지 않는다.

예시

add 함수는 순수함수인가? YES

function add(a, b) {
  return a + b;
}

console.log(add(10,5));
console.log(add(10,5));
console.log(add(10,5));
  1. 동일한 인자를 주면 항상 같은 값을 리턴한다.
  2. 부수 효과가 없다.

함수가 리턴 값으로 결과를 만드는 것 외에 외부 결과에 영향을 미치는 것을 부수 효과라고 하는데, 순수함수는 이러한 부수 효과가 없는 함수를 말한다.

그렇다면 순수함수가 아닌 함수의 형태는 어떠한가?

let c = 10;

function add2(a, b) {
  return a + b + c;
}

c 변수가 변할 수 있다고 가정한다면, add2 는 순수함수가 아니게 된다.
단, c 가 상수라면 이 함수는 순수함수라고 할 수 있다.

일급 함수

일급 함수는 다음과 같은 특징을 가진다.

  • 변수에 함수를 할당할 수 있다.
  • 인자로 함수를 넘길 수 있다.
  • 함수를 리턴할 수 있다.

변수에 할당

var f1 = function(a) { return a * a; }; // 1. 변수에 함수가 담길 수 있다.
console.log(f1);

var f2 = add; // 기존에 선언된 함수도 동일하게 할당할 수 있다.
console.log(f2);

인자에 함수

function f3(f) {
  console.log(f);
  return 10;
}

함수를 리턴

function f3(f) {
  return f();
}

이처럼, 일급 함수 라는 개념과 순수 함수 라는 특징을 이용하여 함수의 조합성을 높이는 것이 함수형 프로그래밍이다.

함수형 프로그래밍을 통해 언제 평가해도 상관 없는 순수 함수 들을 만들어 값으로 들고 다니다가, 가장 적절한(필요한) 시점에 평가하여 다양한 로직을 만들어 나갈 수 있다.

0개의 댓글