본문 바로가기

개발/javascript

함수19 - 순수 함수와 비순수 함수

"함수"

 

7.5. 순수 함수와 비순수 함수

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

 

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

 

var count = 0;	// 현재 카운트를 나타내는 상태

// 외부 상태에 의존하지 않으며 변경하지도 않는 순수 함수
// 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환한다.
function increase(n) {
	return ++n;
}

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

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

 

 

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

 

var count = 0;	// 현재 카운트를 나타내는 상태: increase 함수에 의해 변화한다.

// 함수의 외부 상태에 의존하여 외부 상태에 따라 반환값이 달라지는 비순수 함수
// 비순수 함수는 외부 상태를 변경하는 부수 효과(side effect)가 있다.
function increase() {
	return ++count;	// 외부 상태를 변경한다.
}

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

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

 

위 예제와 같이 함수 내부에서 외부 상태를 직접 팜조하면 외부 상태에 의존하게 되어 반환값이 변할 수 있고, 외부 상태도 변결할 수 있으므로(참고로 ++ 연산자를 사용하지 않고 += 연산자를 사용하면 외부 상태를 변경할 수 없다.) 비순수 함수가 된다. 함수 내부에서 외부 상태를 직접 참조하지 않더라도 매개변수를 통해 객체를 전달받으면 비순수 함수가 된다.

'개발 > javascript' 카테고리의 다른 글

함수18 - 콜백 함수  (0) 2023.10.05
함수17 - 중첩 함수  (0) 2023.10.04
함수16 - 재귀 함수  (1) 2023.10.04
함수15 - 즉시 실행 함수  (1) 2023.10.04
함수14 - 외부 상태의 변경과 함수형 프로그래밍  (1) 2023.10.04