[JS] 순수함수와 비순수함수

codeCYJ·2022년 6월 2일
0

javaScript

목록 보기
24/35

순수함수

어떤 외부 상태에 의존하지도 않고 변경하지도 않는, 즉 부수효과가 없는 함수.
동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수.
오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 값을 생성해 반환한다.
만약 외부 상태에는 의존하지 않고 함수 내부상태에만 의존한다 해도 그 내부 상태가 호출될 때마다 변화하는 값(ex:현재시간)이라면 순수함수가 아니다.

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

//순수함수 increase는 동일한 인수가 전달되면 언제나 동일한 값을 반환한다.
function increase(n){
	return ++n;
};
//순수함수가 반환한 결과값을 변수에 재할당해서 상태를 변경.
count = increase(count);
console.log(count); //1;
count = increase(count);
console.log(count); //2;

비순수함수

외부 상태에 의존하거나 외부 상태를 변경하는, 부수효과가 있는 함수.
외부 상태에 따라 반환값이 달라지는 함수. 외부상태를 변경하는 부수효과가 있다.

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

//비순수함수 
function increase(){
	return ++count; // 외부상태에 의존하며 외부상태를 변경.
};
//비순수함수는 외부상태(count)를 변경하므로 상태변화를 추적하기 어려워짐.
increase();
console.log(count); //1;
increase();
console.log(count); //2;

함수 내부에서 외부 상태를 직접 참조하지 않더라도 매개변수를 통해 객체를 전달받으면 비순수 함수가 된다.
함수가 외부상태를 변경하면 상태변화를 추적하기 어려워진다. 따라서, 함수 외부 상태의 변경을 지양하는 순수함수를 사용하는 것이 좋다.
위 예제의 increase함수와 같은 비순수함수는 코드의 복잡성을 증가시킨다.
비순수함수를 최대한 줄이는 것은 부수효과를 최대한 억제하는 것과 같다.

함수형프로그래밍은 순수함수와 보조함수의 조합을 통해 외부상태를 변경하는 부수효과를 최소화해서 오류를 피하고 프로그램의 안정성을 높이며, 불변성을 지향하는 프로그래밍 패러다임이다.

profile
안녕하세요

0개의 댓글