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

devjune·2021년 9월 26일

ES5

목록 보기
1/14

함수형 프로그래밍

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

  • 부수 효과를 미워한다 === 순수함수를 만든다.
  • 조합성을 강조한다 === 모듈화 수준을 높인다.

순수함수

  • 동일한 인자를 주면 동일한 값을 return하는 함수.
  • 함수가 받은 인자 외에 다른 어떠한 외부 상태에 영향을 끼치지 않는 함수.
  • return값 외에 외부와 소통하는 것이 없는 함수.
  • 부수효과가 없는 함수.(부수효과: 함수가 return값으로 결과를 만드는 것 외에 외부 상태에 영항을 미치는 것)
function add(a, b) {
    return a + b;
}
var c = 10;
function add2(a, b) {
    return a + b + c;
}

console.log( add2(10, 20) ); // 40
c = 20;
console.log( add2(10, 20) ); // 50

var c = 20;
function add3(a, b) {
    c = b;
    return a + b;
}

console.log(c); // 20
add3(20, 30);
console.log(c); // 30

var obj1 = { val: 10 };
function add4(obj, b) {
    obj.val += b;
}

console.log(obj1.val); // 10
add4(obj1, 20);
console.log(obj1.val); // 30
//obj1이라는 외부 객체에 직접 접근하여 값에 영향을 주기 때문에 순수함수라고 할 수 없다.


var obj1 = { val: 10 };
function add5(obj, b) {
   return { val: obj.val + b };
}

console.log(obj1.val); // 10
var obj2 = add5(obj1, 20);
console.log(obj1.val); // 10
console.log(obj2.val); // 30
//외부 객체의 값을 직접 영향을 주지 않기 때문에 순수함수다.

순수함수의 중요한 특징: 평가 시점이 중요하지 않다.(함수형 프로그래밍이 가능한 이유)

일급함수
1.변수에 함수를 담을 수 있는 개념

var f1 = function(a) { return a * a };
console.log(f1);
  1. 함수가 함수를 인자로 받을 수 있음.
function f3(f) {
   return f();
}

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

함수형 프로그래밍 : 언제 평가해도 상관없는 순수함수들을 만들고, 그순수함수들을 값으로 들고 다니면서 적절한 시점마다 평가를 하는 방식으로 프로그래밍 하는 것

순수함수와 일급함수를 이용한 add_maker 함수 만들기.

/* add_maker */

function add_maker(a) {
   return function(b) {
      return a + b;
   }
}

var add10 = add_maker(10);
console.log(add10(20)); // 30

add_maker()를 실행하면서 10을 인자로 넘김.
리턴된 함수가 add10에 담기게 됨.(일급함수 개념)

profile
개발자준

0개의 댓글