순수함수란

dev_log·2022년 8월 10일
0

순수함수란?
오직 함수의 입력(매개변수??)만이 함수의 결과(리턴값)에 영향을 주는 함수.
함수의 입력이 아닌 다른 값이 함수의 결과에 영향을 미치는 경우, 순수함수라고 부를 수 없다.
예1.
let c = 12;
function sum(a, b){return a + b + c}
//위의 sum 함수는 함수의 입력이 아닌 변수c가 리턴값에 영향을 미치므로, 순수함수가 아니다.
예2.
const obj = {value: 12};
function sum(obj, num){return {value: obj.value + num};}
//외부 객체 obj를 참조하는 것으로 보일 수 있지만, 인자로 받아온 객체를 참조하는 것이므로 순수 함수가 맞습니다.

특징
입력으로 전달된 값을 수정하지 않는다.
어떤 전달인자가 주어질 경우, 항상 똑같은 값이 리턴됨을 보장
예측가능한 함수

예시
리액트의 함수 컴포넌트: 입력은 props, 출력은 JSX엘리먼트
-> 순수함수로 작동한다.

어떤 함수가 fetch API를 이용해 AJAX 요청을 한다고 가정해 봅시다. 이 함수는 순수 함수가 아닙니다. 왜일까요?
어떤 함수가 서버에 네트워크 요청을 보낸다면 이로 인해 서버의 데이터에 Side Effect를 일으킬 수 있고, 이에 따라 해당 함수는 순수 함수가 아닙니다.
Ajax 요청은 외부 상태를 바꾸기 때문에 해당 기능을 가진 함수는 순수 함수가 아닙니다.
???????????


순수함수와 사이드 이펙트와의 관계

사이드 이펙트란?
함수 내에서 어떤 구현(실행)이 함수 외부에 영향을 끼치는 경우를 말한다.

예시
React 컴포넌트에서의 Side Effect
타이머 사용 (setTimeout)
데이터 가져오기 (fetch API, localStorage)

0개의 댓글