javascript/인동님 인프런강의 정리

섹션1. 함수형 프로그래밍 개요 정리

리셔시당 2018. 7. 7. 01:32
반응형

이강의 1. https://www.inflearn.com/course-status-2/ 의 내용 정리



함수형 프로그래밍이란 ?

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


일급함수의 개념과 순수함수의 특성을 이용하여 함수의 조합성을 높여가는 것


부수효과를 미워 한다는 말은

순수 함수를 만드는 것인데 순수함수는 들어온 인자가 같으면 항상 동일한 결과를 리턴 하는 함수,

함수가 받은 인자외에 다른 외부에 상태에 영향을 끼치지 않는 함수,

리턴 값 외에는 외부와 소통하는 것이 없는 함수.


함수형 프로그래밍은 순수 함수의 조합으로 프로그래밍을 한다.


순수함수모듈화 수준을 높이게 되면

오류는 적고 안정성이 높은 생산성 좋은 성공적인 프로그래밍을 할 수 있다라고 볼 수 있다.


간단한 순수 함수

/* 순수 함수 */
function add(a, b){
    return a+b;
}

console.log( add(10, 5) ); // 결과 15
console.log( add(10, 5) ); // 결과 15
console.log( add(10, 5) ); // 결과 15

순수 함수인 이유는 항상 동일한 인자를 주면 동일한 결과를  리턴 하고, 또 리턴 하는 값 외에 외부에 영향을 주는 부수 효과가 없다.


순수함수가 아닌 함수

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

console.log( add2(10, 2) ); // 결과 22
console.log( add2(10, 3) ); // 결과 23
console.log( add2(10, 4) ); // 결과 24

var c = 20; // 중간에 c 가 20으로 바뀌면 ? 

console.log( add2(10, 2) ); // 결과 32
console.log( add2(10, 3) ); // 결과 33
console.log( add2(10, 4) ); // 결과 34

순수 함수가 아닌 이유는 중간에 c 가 20으로 바뀌는 기점으로 위에 3개의 인자와 아래의 3개의 인자 는 동일 하지만 결과 가 다르게 나오는 것을 알 수 있다.


부수효과가 있는 함수

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

console.log('c:', c); // 결과 c: 20
console.log( add3(20, 30) ); // 결과 50
console.log('c:', c); // 결과 c: 30

함수를 한번 실행을 시키면 C 의 상태가 20에서  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



순수함수

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. 함수를 변수에 담을 수 있다.

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