본문 바로가기
NodeJS/FuncP

함수형 프로그래밍이란?

by MiteDev 2024. 2. 19.

 

함수형 프로그래밍?

함수형 프로그래밍 (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