함수형 프로그래밍?
함수형 프로그래밍 (Funtional Programming)이란 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. - [위키백과] - |
결국 외부 데이터를 변경하기 않는 순수 함수의 집합이라고 생각하는게 편할것 같습니다. 값의 변경이 일어나는 경우 얕은 복사가 아닌 깊은 복사를 사용해 원본 객체의 값을 복사해 계산을 한 이후 return을 해주어야 합니다.
함수형 프로그래밍에서는 아래와 같은 특징이 있습니다. - 불변성 ( Immutable )
// 원본 데이터가 변경되지 않아야 함
// ===== mutable ======
const value = { age: 10, name: 'dong' };
const mutableFunc = (m_v) => m_v.age = 20;
mutableFunc(value);
conosle.log(value); // { age: 20, name: 'dong' }
// ====================
// ===== immutable ======
const value = { age: 10, name: 'dong' };
const immutFunc = im_v => ({...value, age: 20})
console.log(immutFunc(value)); // { age: 20, name: 'dong' }
console.log(value); // { age: 20, name: 'dong' } => 원본 객체가 변경되지 않음
// ======================
- 순수 함수 ( Pure Function )
// 순수 함수는 동일한 입력에 대해 항상 동일한 결과값을 반환하는 함수
// 함수 외부의 값을 변경하는 등의 Side Effect가 없어야 함
const add = (a, b) => a + b;
console.log(add(1, 2)); // 3
- 일급 객체
/*
Functional Programming에서 Function은 일급
일급은 값으로 다룰 수 있음
일급은 변수에 담을 수 있음
일급은 함수의 인자로 사용될 수 있음
일급은 함수의 결과로 사용될 수 있음
*/
- 고차 함수
// 고차함수는 함수를 값으로 다루는 함수
// 함수를 인자로 받거나 함수를 리턴하거나 둘 다 가능한 함수
// 다른 함수를 return 하는 경우
const addMaker = a => b => a + b;
const add_ten = addMaker(10);
console.log(add_ten(1));
// addMaker를 풀어서 보면 아래와 같음
const addMaker = (a) => {
return (b) => {
return a + b;
}
} // => Closure
const add_ten = addMaker(10);
console.log(add_ten(1));
// 함수를 인자로 받는 경우
// a의 b거듭제곱
const power = (a, b) => a ** b;
const doPower = (func, a, b) => func(a, b)
console.log(doPower(power, 2, 3));
// 함수를 인자로 받고 함수를 return 하는 경우
const power = a => b => a ** b;
const powerAfterPower = (n, func) => power(func(n));
console.log(powerAfterPower(2, power(3))); // b => a ** b, 해당 시점에서 a === 9
console.log(powerAfterPower(2, power(3))(2)); // 9의 2승 = 81
'NodeJS > FuncP' 카테고리의 다른 글
Go, Pipe, Curry (1) | 2024.02.20 |
---|---|
Iterator, Iterable (0) | 2024.02.19 |