함수형 프로그래밍 개요

김민재·2023년 1월 11일
0

함수형 프로그래밍

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

//  순수 함수 아닌 예 - 결과 변경하는 함수
let c = 1
function add2(a, b) {
    return a+b+cㅇ
}
add2(10,2) 
add2(10,3) 
add2(10, 4)
c = 3
add2(10,2) 
add2(10,3) 
add2(10,4) 

// 순수 함수 아닌 예2 - 부수효과 발생하는 함수
function add3(a, b) {
    c = b // 부수효과 발생
    return a + b;
}

add3(20,30)
// c 값 30으로 바뀜

// 순수 함수 아닌 예3 - 넘어온 인자의 상태 직접 변경

const obj = { val: 10 }

function add4(obj, b) {
    obj.val += b
}
obj.val
add4(obj, 20)
// 값이 바뀜
obj.val

// 순수함수 예시
const obj1 = { val: 10 }
function add5(obj, b) {
    return{ val : obj.val + b}
}
obj1.val

const obj2 = add5(obj1, 20)

obj1.val

obj2.val
// 1. 순수함수는 항상 동일한 인자를 넣으면 같은 값을 리턴한다

// 2. 순수함수는 평가시점이 중요하지않다

// 특징
// 1. 변수에 함수를 담을 수 있다.

// 2. 함수를 인자로 받을 수 있다.

function add(a, b) {
    return a + b;
}

const f1 = function(a){ return a*a ;}
f1
const f2 = add
f2

function f3(f){
  return f()
}
f3(function(){return 1})
f3(function(){return 2})

// add_maker - 일급함수와 클로저 예제

function add_maker(a){
  // 내부 함수가 클로저
  return function(b){
    return a+b
  }
}
// 중요한 건 add_maker의 내부 함수에서 변수 a가 사용되지만 변경은 하지 않고 있다는 것

const add10 = add_maker(10)
add10(20)
const add15 = add_maker(15)
add15(20)

function f4(f1, f2,f3){
  return f3(f1()+f2())
}

f4(
function(){return 2},
function(){return 1},
  function(a) {return a* a}
)

// 순수함수가 유용할 때는 비동기가 일어나는 시점, 동시성을 필요한 시점에서 함수를 필요한 시점, 실행하는 시점까지 값으로 다루다 원하는 시점에 평가 가능

요즘 개발 이야기

객체 지향과 함수 지향

  • 데이터(객체) 기준

  • 데이터를 먼저 디자인, 데이터에 맞는 메서드 세팅
    dog.moveLeft()
    douk.moveLeft()
    dog.moveRigft()
    duck.moveRigft()

  • 함수 기준

  • 함수를 먼저 만들고, 함수에 맞게 데이터 셋을 구성
    moveLeft(dog)
    moveRigft(duck)
    moveRigft({x:1,y:2})
    moveRigft(dog)

함수형 프로그래밍 왜, 보다 어떻게 전환해왔는가?

profile
자기 신뢰의 힘을 믿고 실천하는 개발자가 되고자합니다.

0개의 댓글