[JS] 비순수 함수, 순수 함수

은비·2023년 10월 9일
1

JS_Study

목록 보기
13/18
post-thumbnail

함수형 프로그래밍은 최대한 상태 및 변경 가능한 데이터를 지향하고 코드의 이해성과 예측 가능성을 높이며, 버그를 줄이고 코드를 간결하게 작성할 수 있도록 해야한다.

순수 함수(Pure Function)
같은 input, 같은 output이다.
side-effect(부수 효과 없음)가 없다.

비순수 함수(Non-Pure Function)
위에서 언급한 순수함수의 조건 중 하나 혹은 둘 다 만족하지 않는 경우를 말한다.
비순수함수는 외부 상태에 의존하거나 외부 상태를 변경할 수 있으며, 같은 입력에 대해서도 다른 결과를 반환할 수 있다.

🔎 비순수 함수의 예시

첫번째 예시

let count = 1; // count 변수는 외부 상태이다.

function fn() {
  count += 1; // 외부 상태를 변경한다, 비순수 함수이다.
}

fn();
console.log(count); // 2
fn();
console.log(count); // 3

위의 fn 함수는 외부 변수 count의 값을 변경하는 역할을 한다.
이러한 행동 때문에 fn함수는 비순수 함수이다.
같은 입력이 주어져도, 내부적으로 참조하고 있는 count 값에 따라 다른 결과를 가져온다.

두번째 예시

let c = 0;
const f = (a, b) => a + b + c; 

console.log(f(1, 2));

c += 1;
console.log(f(1, 2)); // f는 비순수 함수이다.

🔎 순수 함수의 예시

첫번째 예시

function add(a, b) {
  return a + b;
}

console.log(add(1, 2)); // 항상 동일한 입력에 대해 동일한 출력을 반환한다.

위의 add 함수는 주어진 두 수를 더하는 역할을 한다.
이 함수는 외부 상태에 의존하지 않으며 외부 상태를 변경하지도 않는다.

두번째 예시

const a = (a, b) => {
  let c = 0;
  c += 1;
  return (a, b) => a + b + c; // 항상 동일한 입력에 대해 동일한 출력을 반환한다.
};

❗️ 결론

함수형 프로그래밍에서는 사이드 이펙트를 최소화하고, 가능한 한 순수 함수를 사용하여 코드의 예측 가능성과 재사용성을 높이려고 해야한다. side-effect가 필요한 경우에는 이를 명시적으로 표현하고 제어하는 것이 중요하다.

0개의 댓글

관련 채용 정보