본문 바로가기
Dot/Woowa-dots

순수 함수 / 비순수 함수

by jum0 2021. 2. 23.

순수 함수

동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수(=외부 상태에 의존하지 않는 함수)

특징

외부 상태에 의존하지 않고, 오직 매개변수를 통해 함수 내부로 전달된 인수에만 의존해 반환 값을 만든다

함수 외부 상태를 변경하지 않는다

let cnt = 0;

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

cnt = increase(cnt);
console.log(cnt); // 1

cnt = increase(cnt);
console.log(cnt) // 2

 

비순수 함수

함수의 외부 상태에 따라 반환 값이 달라지는 함수(=외부 상태에 의존하는 함수)

특징

함수 외부 상태에 의존하거나 외부 상태를 변경한다

외부 상태를 변경하므로 상태 변화를 추적하기 어려워진다

let cnt = 0;

// 비순수 함수 - 외부 상태에 의존하며 외부 상태를 변경
function increase() {
  ++cnt; 
}

increase();
console.log(cnt); // 1

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

 

⚠️ 함수 내부에서 외부 상태를 직접 참조하지 않더라도 매개변수를 통해 객체를 전달받으면 비순수 함수가 된다

 

순수 함수는 보조 함수와의 조합으로 함수형 프로그래밍(외부 상태를 변경하는 부수 효과를 최소화하여 불변성을 지향하는 프로그래밍 패러다임)을 이룬다


수정해야 할 부분이 있다면 알려주세요!

감사합니다!

반응형

댓글