[함수] - 순수 함수와 비순수 함수

Donggu(oo)·2022년 12월 14일
0

JavaScript

목록 보기
19/49
post-thumbnail

1. 순수 함수


  • 순수 함수(Pure Function)란 어떤 외부 상태에 의존하지도 않고 변경하지도 않는(매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 반환값을 만듬), 즉 부수 효과가 없는 함수를 말한다.
  • 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수이다. 그래서 예측 가능한 함수이다.
var count = 0;  // 현재 카운트를 나타내는 상태

// 순수 함수 increase는 동일한 인수가 전달되면 언제나 동일한 값을 반환한다.
function increase(n) {
  return ++n;
}

// 순수 함수가 반환한 결과값을 재할당해서 상태를 변경
count = increase(count);
console.log(count);  // 1

count = increase(count);
console.log(count);  // 2
function upper(str) {
  // toUpperCase 메서드는 원본을 수정하지 않는다.(Immutable)
  return str.toUpperCase();
}

console.log(upper('hello')) // 'HELLO'

Math.random()은 순수 함수가 아닙니다. 왜일까요?

  • 순수 함수는 어떠한 전달 인자가 주어질 경우, 항상 똑같은 값이 리턴되어야 하지만 Math.random()은 매 실행 시 마다 다른 값을 리턴하기 때문이다.

어떤 함수가 fetch API를 이용해 AJAX 요청을 한다고 가정해 봅시다. 이 함수는 순수 함수가 아닙니다. 왜일까요?

  • AJAX 요청은 네트워크 상황, 서버 상태에 따라 응답 코드가 달라지기 때문에 예측이 불가능하다.

2. 비순수 함수


  • 비순수 함수란 외부 상태에 의존하거나(외부 상태에 따라 반환값이 달라지는 함수) 외부 상태를 변경하는, 즉 부수 효과(Side Effect)가 있는 함수를 말한다.
  • 비순수 함수는 외부 상태에 의존하거나 외부 상태를 변경하는 함수다.
  • 함수 내부에서 외부 상태를 직접 참조하지 않더라도 매개변수를 통해 객체를 전달받으면 비순수 함수가 된다.
// 함수 내부에서 외부 상태를 직접 참조하면 외부 상태에 의존하게 되어
// 변환값이 변할 수 있고, 외부 상태도 변경할 수 있으므로 비순수 함수가 된다.
var count = 0;  // 현재 카운트를 나타내는 상태, increase 함수에 의해 변화한다.

// 비순수 함수
function increase() {
  return ++count;  // 외부 상태에 의존하며 외부 상태를 변경한다.
}

// 비순수 함수는 외부 상태(count)를 변경하므로 상태 변화를 추적하기 어렵다.,
increase();
console.log(count);  // 1

increase();
console.log(count);  // 2

0개의 댓글