섹션1. 함수형 프로그래밍 개요 정리
이강의 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. 함수를 인자로 사용 할 수 있다.