순수함수와 비순수 함수 (javascript)

김종화·2023년 7월 19일

JavaScript

목록 보기
11/18

함수형 프로그래밍에서 어떤 외부 상태에 의존하지 않고 변경시키지도 않는, 부수적인 효과가
없는 함수를 순수함수, 외부 상태를 변경시키는 함수를 비순수 함수라고 부른다.

순수 함수는 동일한 인자 전달되면 언제나 동일한 값을 반환한다. 즉, 순수 함수는 어떤 외부 상태에도 의존하지 않고 오직 매개변수를 통해 함수 내부로 전달된 인자게만 의존하여 반환값을 만든다.
함수의 외부 상태에 의존하는 함수는 외부 상태에 따라 반환값이 달라진다.

순수함수의 특징은 함수의 외부 상태를 변경하지 않는다는 것이다.

var count = 0

function increase (n) {
	return ++n
}

// 외부 상태에 의존하지 않으며 변경하지도 않는 순수 함수
// 순수 함수는 동일한 인자 전달되면 언제나 동일한 값을 반환한다.

count = increase(count)
console.log(count) // 1

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

// increase 함수는 count 값을 전달받고 있으나 외부상태에 어떤 영향도 주지 않음.
// 동일한 인자 전달 받으면 언제나 동일한 값을 반환한다.
// 1이라는 값을 전달 받으면 언제나 2라는 값을 반환
// 즉, 언제나 같은 값을 반환

반대로 함수의 외부 상태에 의존하여 외부 상태에 따라 반환값이 달라지는 함수를 비순수 함수라고 한다.
비순수 함수의 또 하나의 특징은 순수 함수와는 달리 함수의 외부 상태를 변경하는
부수효과가 있다는 것이다.


// 함수의 외부 상태에 의존하여 외부 상태에 따라 반환값이 달라지는 비순수 함수
// 비순수 함수는 외부 상태를 변경하는 부수 효과가 있다.
var count = 0
function increase() {
	return ++count // 외부 상태를 직접 참조하고 있다.
}

// 위 함수는 인자 받지 않고 있고 호출될 때마다 동일한 값이 보장되지 않는다.
// count 라는 외부 상태에 의존하고 있기 때문데 count 값에 따라 어떠한 값을 반환할지 예측할 수 없다.

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

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

리액트는 리덕스를 공부하다가 순수함수에 대한 개념이 나와서 정리해 보았다.
리덕스에서 리듀서 함수는 이전 상태와 액션 객체를 파라미터로 받는다.
동일 인풋에 대한 동이 아웃풋이 보장되어야 한다(순수해야 한다)

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

글이 잘 정리되어 있네요. 감사합니다.

답글 달기