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이 맞는지 고민해야합니다.