JavaScript

[JavaScript] 순수 함수

주니야 공부하자 2023. 12. 20. 15:45

순수하지 않은 함수

let num1 = 10
let num2 = 20

const impureFunc = () => {
  return num1 + num2
}

impureFunc() // 30

num1 = 30

impureFunc() // 50

함수는 호출할 때마다 같은 값을 반환해야합니다.

하지만 외부에서 값을 조작할 수 있기 때문에 함수에 고유한 일관성이나 값을 갖고있지 않습니다.

비순수 함수는 호출할 때 값을 예측할 수 없습니다.

 

 

순수 함수

부작용(Side Effect)을 일으키지 않는 함수

const pureFunc = (num1 + num2) => {
  return num1 + num2
}

pureFunc(10, 20) // 30

함수에 필요한 것을 모두 매개변수로 받게되면 함수를 호출할 때마다 값을 예측할 수 있습니다.

 

 

순수 함수를 만들 때 주의사항

객체 또는 배열을 함수에서 조작하게 되면 원본의 값이 바뀌어버릴 수 있습니다.

const obj = { one: 1 }

const changeObj = (targetObj) => {
  targetObj.one = 100
  
  return targetObj
}

changeObj(obj) // { one: 100 }

obj // { one: 100 }

 

 

 

그렇기 때문에 함수에서 객채 또는 배열 조작하게 되면 새롭게 만들어서 반환하는 것이 좋습니다.

const obj = { one: 1 }

const changeObj = (targetObj) => {  
  return {...targetObj, one: 100}
}

changeObj(obj) // { one: 100 }

obj // { one: 1 }

 

함수를 만들때 항상 의식적으로 순수 함수를 만든다는 생각으로 작성하는 것이 좋습니다.

동일한 input과 output이 맞는지 고민해야합니다.