함수형 프로그래밍

Rudy·2023년 5월 10일
0

함수형 프로그램

함수형 프로그래밍은 수학적 함수의 계산을 통해 자료를 처리하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임 중 하나다.

함수형 프로그램은 수학원리와 밀접하게 연관되어 있다. 배우는데 시간이 오래걸림
그래서 사람의 사고와 가까운 절차지향,객체지향을 조금더 선호한다.

하지만 요즘 AI,IOT,빅데이터,비트코인 뜨면서 방대한 데이터를 빠르게 계산해서 병렬적으로
안정적으로 처리하는 것이 중요해지기 시작했다.

특징

Pure Functions 순수함수

함수에서 외부의 상태값을 참조하거나 또는 외부의 상태를 변경하는 것은 순수함수가 아니다.
동일한 인자를 넣었을때, 동일한 값을 반한한다.

// 순수 함수가 X
let count =1

function sum(a){
  return a + count
}

// 순수함수
function sum(a,b){
  return a + b
}

const result = sum(1,2)

console.log(result)

Stateless, Immutablility 비상태,불변성

인자로 전달된 데이터를 변경하는 것은 절대 함수형이 아니다.
함수형 프로그램에서는 전달된 데이터를 변경 불가
새로운 버전의 , 새로운 오브젝트를 만들어서 사용하고 결과값을 전달 한다

  • 불변성을 유지하기 때문에 여러가지 동시 다발적인 멀티쓰레딩 환경에서도 안정적으로 동작이 가능하다.
let person = {name:"사람",age:10};

function addAge(person){
  person.age = person.age + 1;
  return person
}

// Stateless, Immutability
const person={name:"사람1",age:20};

function addAge(person){
  return {...person, age: person.age + 1
         }
}

console.log(person,"확인중")

Expressions Only

함수형 프로그래밍 에서는 If나 Switch 사용안하고 프로그래밍을 해야 한다.

// for loop
let num = [1,2,3]

function sum(num,total){
     for(let i=0; i < num.length; i++){
      num[i] *= total
       console.log(num[i])
  }
 
}

sum(num,3)

// Expressions

function sum1(num,total){
  return num.map((item)=> item * total)
}

sum1(num,3)

Fist-Class and Higher-order Functions 일급함수,고차함수

다른데이터와 마찬가지로 함수를 변수에 할당하거나. 함수에 인자로 전달하거나 리턴하는 등의 일을 할수 있는 First-Class (일급함수) 특징과 그리고 함수 자체를 인자로 전달하거나 함수에서 또 다른 함수를 리턴하는 고차 함수 특징을 가지고 있어야 한다.

// 일급 함수
const addTwo = a => a + 2;
const mulTwo = a => a * 2;
const transForm = numbers => numbers.map(addTwo).map(mulTwo);

console.log(transForm([1,2,3,4]))
// 고차함수

const addToppings = topping => food => food + topping;
const egg = addToppings('egg')
const bacon = addToppings("bacon")

console.log(egg("bacon"))
console.log(bacon("egg"))

Fist-Class 일급객체

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 가능
  • 반환값 으로 사용할 수 있다.
  • 동적으로 프로퍼티 할당이 가능하다.


profile
주니어 개발자

0개의 댓글