순수함수와 비순수함수

sean k·2023년 3월 30일
0

개념정리

목록 보기
5/7

순수 함수(Pure Function)는 입력값에 대해 항상 동일한 결과를 반환하며, 함수 내부에서 외부 상태를 변경하지 않는 함수를 말합니다.

  1. 동일한 입력에 대해 항상 같은 출력을 반환합니다.
  2. 함수 내부에서 외부 상태를 변경하지 않으며, 오로지 입력값에만 의존합니다.
  3. 부작용(side effect)이 없습니다. 즉, 함수의 실행이 프로그램의 상태를 변경하지 않습니다.
function add(x, y) {
  return x + y;
}

console.log(add(2, 3)); // 5
console.log(add(2, 3)); // 5
console.log(add(4, 5)); // 9

순수 함수는 상태를 변경하지 않기 때문에 여러 스레드나 프로세스에서 동시에 호출해도 안전하고, 같은 입력에 대해 항상 같은 결과를 보장하기 때문에 디버깅과 테스트도 용이합니다. 또한, 순수 함수는 입력과 출력 사이의 매핑이 명확하기 때문에 추론이나 최적화가 용이합니다.

비순수 함수(Impure Function)는 외부 상태를 변경하거나, 예측 불가능한 결과를 반환하는 함수입니다. 외부 상태를 변경하는 함수는 다른 부분에 영향을 미치기 때문에, 프로그램의 동작을 예측하기 어렵습니다. 또한 같은 입력에 대해 항상 같은 결과를 반환하지 않으므로, 디버깅하기도 어렵습니다.

let x = 0;

function increment() {
  x++;
}

console.log(x); // 0
increment();
console.log(x); // 1
increment();
console.log(x); // 2

위 예제에서 increment 함수는 외부 상태인 변수 x의 값을 변경하므로 순수 함수의 조건을 만족하지 않습니다. 즉, 같은 입력값에 대해서 항상 같은 출력값을 반환하지 않으며, 함수 실행 후 외부 상태가 변경됩니다. 따라서, increment 함수는 비순수 함수입니다.

비순수 함수는 순수 함수보다 프로그램의 동작을 추론하고 디버깅하기가 어렵습니다. 예를 들어, increment 함수를 호출하는 다른 코드에서는 x의 값이 변할 수 있기 때문에 예측이 어렵습니다. 이러한 이유로 함수형 프로그래밍에서는 부작용을 최소화하는 방식으로 프로그래밍을 하기 위해 순수 함수를 사용합니다.

0개의 댓글