함수형 프로그래밍은 계산을 수학 함수의 평가로 취급하는 프로그래밍 패러다임입니다. 상태 변경과 변경 가능한 데이터를 방지합니다. 기본적인 아이디어는 순수 함수를 사용하여 프로그램을 구축하고, 부작용을 피하고, 불변 데이터 구조로 작업하는 것입니다.
함수형 프로그래밍의 주요 특징은 다음과 같습니다.
자바스크립트에서 FP를 정의하는 가장 중요한 개념 중 일부를 살펴보겠습니다.
순수 함수는 부작용을 일으키지 않는 함수입니다. 즉, 외부 상태를 수정하지 않는다는 의미입니다. 입력 매개변수에만 의존하며 동일한 입력이 주어지면 항상 동일한 출력을 반환합니다.
예:
// Pure function example function add(a, b) { return a b; } add(2, 3); // Always returns 5
순수 함수에는 여러 가지 장점이 있습니다.
불변성은 변수나 객체가 생성되면 수정할 수 없음을 의미합니다. 대신, 변경해야 할 사항이 있으면 새 인스턴스를 생성하세요.
예:
const person = { name: "Alice", age: 25 }; // Attempting to "change" person will return a new object const updatedPerson = { ...person, age: 26 }; console.log(updatedPerson); // { name: 'Alice', age: 26 } console.log(person); // { name: 'Alice', age: 25 }
데이터를 변경할 수 없도록 유지하면 특히 복잡한 애플리케이션에서 의도하지 않은 부작용이 발생할 위험을 줄일 수 있습니다.
JavaScript에서 함수는 일급 시민입니다. 즉, 함수를 변수에 할당하고, 다른 함수에 인수로 전달하고, 함수에서 반환할 수 있습니다. 이 속성은 함수형 프로그래밍의 핵심입니다.
예:
const greet = function(name) { return `Hello, ${name}!`; }; console.log(greet("Bob")); // "Hello, Bob!"
고차 함수는 다른 함수를 인수로 사용하거나 반환하는 함수입니다. 이는 함수형 프로그래밍의 초석이며 더 큰 유연성과 코드 재사용을 허용합니다.
예:
// Higher-order function function map(arr, fn) { const result = []; for (let i = 0; i x * x); console.log(squared); // [1, 4, 9, 16]
JavaScript의 Array.prototype.map, filter 및 Reduce는 함수형 프로그래밍에 도움이 되는 고차 함수의 내장된 예입니다.
함수 합성은 여러 함수를 하나의 함수로 결합하는 과정입니다. 이를 통해 한 함수의 출력이 다음 함수의 입력이 되는 작업 파이프라인을 만들 수 있습니다.
예:
const multiplyByTwo = (x) => x * 2; const addFive = (x) => x 5; const multiplyAndAdd = (x) => addFive(multiplyByTwo(x)); console.log(multiplyAndAdd(5)); // 15
함수 합성은 재사용 및 유지 관리가 가능한 코드를 구축하는 강력한 기술입니다.
커링(Currying)은 여러 인수를 취하는 함수를 각각 단일 인수를 취하는 일련의 함수로 변환하는 기술입니다. 재사용 가능하고 부분적으로 적용되는 기능을 만드는 데 특히 유용합니다.
예:
function add(a) { return function(b) { return a b; }; } const addFive = add(5); console.log(addFive(3)); // 8
이 기술을 사용하면 로직을 다시 작성할 필요 없이 특수 기능을 만들 수 있습니다.
재귀는 동일한 문제의 더 작은 인스턴스를 해결하기 위해 함수가 자신을 호출하는 또 다른 함수형 프로그래밍 기술입니다. 루프에는 변경 가능한 상태(함수형 프로그래밍에서는 이를 피하려고 시도함)가 포함되므로 이는 FP에서 루프의 대안으로 자주 사용됩니다.
예:
function factorial(n) { if (n === 0) return 1; return n * factorial(n - 1); } console.log(factorial(5)); // 120
재귀를 사용하면 더 작은 하위 문제로 나눌 수 있는 작업에 대해 더 깔끔하고 읽기 쉬운 코드를 작성할 수 있습니다.
부작용은 함수가 일부 외부 상태(예: 전역 변수 변경 또는 DOM과 상호작용)를 수정할 때 발생합니다. 함수형 프로그래밍의 목표는 부작용을 최소화하고 함수를 예측 가능하고 독립적으로 유지하는 것입니다.
부작용의 예:
let count = 0; function increment() { count = 1; // Modifies external state } increment(); console.log(count); // 1
함수형 프로그래밍에서는 기존 상태를 수정하는 대신 새 데이터를 반환하여 이러한 종류의 동작을 방지합니다.
FP 대안:
function increment(value) { return value 1; // Returns a new value instead of modifying external state } let count = 0; count = increment(count); console.log(count); // 1
JavaScript에서 함수형 프로그래밍을 채택하면 다음과 같은 다양한 이점을 얻을 수 있습니다.
JavaScript는 함수형 프로그래밍을 최고 수준으로 지원하지만 라이브러리는 함수형 코드 작성 능력을 향상시킬 수 있습니다. 일부 인기 있는 라이브러리는 다음과 같습니다.
예:
const _ = require('lodash/fp'); const add = (a, b) => a b; const curriedAdd = _.curry(add); console.log(curriedAdd(1)(2)); // 3
예:
const R = require('ramda'); const multiply = R.multiply(2); const add = R.add(3); const multiplyAndAdd = R.pipe(multiply, add); console.log(multiplyAndAdd(5)); // 13
예:
const { Map } = require('immutable'); const person = Map({ name: 'Alice', age: 25 }); const updatedPerson = person.set('age', 26); console.log(updatedPerson.toJS()); // { name: 'Alice', age: 26 } console.log(person.toJS()); // { name: 'Alice', age: 25 }
함수형 프로그래밍은 깔끔하고 예측 가능하며 유지 관리 가능한 JavaScript 코드를 작성하기 위한 강력한 패러다임을 제공합니다. 순수한 기능, 불변성 및 부작용 방지에 중점을 두어 개발자는 더욱 안정적인 소프트웨어를 구축할 수 있습니다. 모든 문제에 기능적 접근 방식이 필요한 것은 아니지만 FP 원칙을 통합하면 JavaScript 프로젝트가 크게 향상되어 코드 구성, 테스트 가능성 및 모듈성이 향상될 수 있습니다.
JavaScript로 계속 작업하면서 적절한 곳에 함수형 프로그래밍 기술을 통합해 보세요. FP의 이점은 코드베이스가 성장하고 복잡해짐에 따라 더욱 분명해집니다.
즐거운 코딩하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3