함수형 프로그래밍은 부수효과(side effect)를 배제하고 조합성을 강조하는 프로그래밍 패러다임
순수함수
//순수함수 예시 function add(a,b){ return a+b; } console.log(add(12,34)); console.log(add(12,34)); |
순수 함수는 항상 동일한 결과를 리턴한다.
//부수효과 예시 let sideEffect1 = 10; function add2(a,b){ return add(a,b)+ sideEffect1; } console.log(add2(10,20)); sideEffect1 = 20; console.log(add2(10,20)); |
외부 인자에 영향을 받는다.
let sideEffect2 = 10; function add3(a,b){ sideEffect1 = a; // 외부에 영향을 준다 sideEffect2 = b; return add(a,b); } console.log(add3(10,20)); console.log(add3(10,20)); |
항상 같은 결과를 리턴하지만, 함수가 외부에 영향을 미치고 있다.
함수형 프로그래밍에선 원래 값을 유지하며, 새로운 값을 만들어 가공해 리턴한다.
//새로운 값을 만든다는 것은 Call By Reference가 대상이다. const arr = [1,2,3,4,5]; function multiplyArr(arr){ //새로운 값 const result = arr.slice(); for(const idx in result){ result[idx] = result[idx] * 2; } return result; } console.log(multiplyArr(arr)); console.log(arr); |
순수함수는 평가 시점이 중요하지 않다. 아무때나 호출해도 항상 같은 결과를 리턴한다.
일급함수
함수를 변수에 담는 것
즉, 함수를 값처럼 다룰 수 있다는 의미로, 이는 변수로 다른 함수의 인자로, 혹은 함수의 반환 값으로 함수가 올 수도 있다는 의미다.
//일급함수 const get10 = () => 10; //함수를 변수에 담는다. //함수를 인자로 받는 함수, 함수를 변수에 담았음 const add30 = function(fn){ return 30 + fn(); } //인자로 함수를 전달했다. console.log(add30(get10)); |
함수와 메서드 차이
//함수는 단독으로 존재할 수 있다. function hello(name){ console.log("hello "+name); } //메서드는 클래스 속에 존재한다. class Hello{ hello(name){ console.log("hello "+name); } } hello("홍길동"); new Hello().hello("홍길동"); |