이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
JavaScript는 개발자가 유연하고 강력한 코드를 작성할 수 있게 해주는 강력한 프로그래밍 언어입니다. 그러나 JavaScript의 강력함은 디버그하기 어려운 코드 오류로 이어질 수 있는 어느 정도의 복잡성과 함께 제공됩니다.
JavaScript 코드의 복잡성을 줄이고 더 강력하게 만드는 한 가지 방법은 순수 함수를 작성하는 것입니다. 순수 함수는 동일한 입력에 대해 항상 동일한 결과를 반환하고 부작용이 없는 함수입니다. 즉, 순수 함수는 결정론적입니다.
순수 함수는 다음 두 가지 주요 이유로 중요합니다.
순수하지 않은 함수보다 추론하기 쉽습니다.
순수하지 않은 함수보다 테스트하기 쉽습니다.
순수 함수의 예를 살펴보겠습니다.
function square(x) {
return x * x;
}
이 함수는 단일 입력 x
를 사용하고 해당 입력의 제곱을 반환합니다. 함수는 동일한 입력에 대해 항상 동일한 결과를 반환하기 때문에 결정론적이라고 합니다.
반대로 다음과 같은 불순한 함수를 고려하십시오.
function square(x) {
console.log(x);
return x * x;
}
이 함수는 동일한 입력 x
를 사용하고 해당 입력의 제곱을 반환합니다. 그러나 부작용도 있습니다. x
값을 콘솔에 출력합니다. 이 함수는 부작용이 있기 때문에 비결정적이라고 합니다.
순수 함수는 부작용을 지원하는 프로그래밍 언어로만 작성할 수 있다는 점에 유의해야 합니다. JavaScript는 그러한 언어 중 하나입니다. 반대로 Haskell 및 PureScript와 같은 언어는 부작용을 허용하지 않으므로 이러한 언어의 모든 기능은 순수합니다.
순수 함수에 대한 일반적인 오해 중 하나는 함수가 지루하고 유연성이 부족하다는 것입니다. 이것은 사실이 아닙니다. 순수 함수는 비순수 함수만큼 유연할 수 있습니다. 유일한 차이점은 순수 함수가 추론하기 쉽고 테스트하기 쉽다는 것입니다.
JavaScript에서 순수 함수를 작성하기 위해 따를 수 있는 몇 가지 규칙이 있습니다.
// 이것은 전역 변수를 사용하기 때문에 불순한 함수입니다.
함수 불순(x) {
x * window.y를 반환합니다.
}
// 부작용이 있기 때문에 순수하지 않은 함수입니다.
함수 불순(x) {
console.log(x);
반환 x * x;
}
// 이것은 변경 가능한 데이터 구조를 사용하기 때문에 불순한 함수입니다.
함수 불순(x) {
x.push(1);
x를 반환합니다.
}
// 이것은 네트워크 요청을 하기 때문에 불순한 함수입니다.
함수 불순(x) {
return fetch('https://example.com/api/v1/users/' + x).then(function(response) {
return response.json();
});
}
// 이것은 Math.random()을 사용하기 때문에 순수하지 않은 함수입니다.
함수 불순(x) {
return x * Math.random();
}
이러한 규칙을 따르면 함수가 순수한지 확인할 수 있습니다. 순수 함수는 추론하기 쉽고 테스트하기 쉬우므로 안전하고 신뢰할 수 있는 코드를 작성하는 데 필수적입니다.