함수형 프로그래밍

MyeonghoonNam·2021년 8월 9일
2

함수형 프로그래밍

목록 보기
1/10

이 글을 읽기전에 프로그래밍 패러다임에 대한 이해를 먼저 하자.

함수형 프로그래밍

부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임

  • 부수 효과: 외부 상태를 변경하거나 함수로 들어온 인자 상태를 변경하는 것
  • 순수 함수
    • 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수
    • 외부의 상태를 변경하거나 영향을 받지 않는 함수

순수한 함수

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

console.log(func(2, 2)); // 4

위 func 함수는 순수하다.

언제나 이 함수를 수백번 실행시켜도 입력값이 2, 2면 출력값이 4로 동일하기 때문이다. 또한 이 함수는 외부의 값에 영향을 주거나 받지 않는다.

순수하지 않은 함수

let c = 1;

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

console.log(func(2, 2)); // 5

c = 2; // c 값이 변경됨

console.log(func(2, 2)); // 6

위 함수는 외부 값인인 c에 영향을 받기 때문에 순수함수가 아니다. c가 변하면 동일한 입력에 대해 출력이 다르기 때문이다.


평가

코드가 계산되어 값을 만드는 것을 말한다.

[1,2+3]
=== [1,5]

[1,2,[3,4]]
=== (3) [1, 2, Array(2)]

일급

값으로 다룰 수 있는 것을 말한다. 함수를 값으로 다룬다면 아래와 같이 사용될 수 있다.

  • 변수에 담을 수 있다.

  • 함수의 인자로 사용될 수 있다.

  • 함수의 결과로 사용될 수 있다.

const a = 10;
const add10 = a => a + 10;
add10(a);

const r = add10(a);

일급 함수

  • 함수를 값으로 다룰 수 있다.

  • 함수를 변수에 할당할 수 있다.

  • 함수의 인자로 함수를 사용할 수 있다.

  • 함수의 결과로 함수를 사용할 수 있다.

  • 함수형 프로그래밍에서는 함수가 일급이라는 성질을 이용하여 많은 조합성과 추상화의 도구로 사용되어진다.

const add5 = a => a + 5;
console.log(add5);
console.log(add5(5));

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

const f2 = f1();
console.log(f2);
console.log(f2());

고차 함수

  • 함수를 값으로서 다루는 함수.

  • 함수를 인자로 받아서 사용하는 함수.

  • 함수를 반환하는 함수. ex) 클로저를 반환하는 함수.

const apply1 = f => f(1);
const add2 = a => a + 2;

console.log(apply1(add2));
console.log(apply1(a => a - 1));

const addMaker = a => b => a + b;
const add10 = addMaker(10);

console.log(add10(5));
console.log(add10(10));
profile
꾸준히 성장하는 개발자를 목표로 합니다.

0개의 댓글