JavaScript/함수형 프로그래밍8 [JavaScript]함수형 프로그래밍 - 합성(composition) 앞에서 설명한 내용들을 기반으로 필요한 기능 및 로직을 순수 함수로 나누어 개발합니다. 이렇게 나누어진 순수 함수들을 합쳐야 하는 경우가 존재합니다. 예를 들어 A 함수를 실행 후 B 함수를 실행하거나 또는 A 함수를 실행 후 C 함수를 실행해야 하는 경우 (A, B), (A, C)처럼 함수를 조합하는 과정이 필요합니다. 이러한 과정을 함수 합성(function composition)이라고 합니다. 이번 포스팅에서는 함수 합성의 내용을 정리합니다. 메서드 체이닝도 합성의 일부다. 메서드 체이닝을 사용하면, 이전에 호출한 함수의 결과에 다음 함수를 호출할 수 있습니다. 아래 코드는 replace 함수를 사용하여 문자열을 변경하고 변경된 문자열에 또 replace 함수를 사용하는 코드입니다. 따라서, 메서드.. JavaScript/함수형 프로그래밍 2021. 8. 15. [JavaScript]함수형 프로그래밍 - 재귀(Recursion) 재귀(recursion) 함수는 자기 자신을 호출하는 함수를 말합니다. for문과 같은 반복문은 재귀로 변환할 수 있으며, 재귀로 코드를 작성하는 방법이 더 효율적일 수도 있습니다. 이번 포스팅에서는 반복문을 재귀 함수로 변경하는 코드를 기반으로 재귀에 대한 내용을 정리합니다. 재귀에 대한 개념 및 이론적인 설명은 하지 않으며, 함수형 프로그래밍과 연관 지어 설명합니다. 배열의 합계를 재귀 함수로 작성 반복문을 사용하여 5부터 0까지의 합계를 반환하는 코드입니다. var totalValue = function(param) { var sum = 0; for(var loop = param; loop > 0; loop--) { sum += loop; } return sum; } console.log(total.. JavaScript/함수형 프로그래밍 2021. 8. 15. [JavaScript]함수형 프로그래밍 - 고차 함수 함수형 프로그래밍에서 고차 함수(high order function) 통칭 HOF가 존재합니다. 고차 함수는 다른 함수를 인자로 받거나 또는 함수를 반환하거나 방금 말한 두 가지를 모두 수행하는 함수입니다. 이번 포스팅에서는 고차 함수에 대해 정리합니다. 다른 함수를 인자로 받음 다른 함수를 인자로 받는 함수는 Array.map, Array.filter, Array.reduce와 같은 함수들이 존재합니다. 즉, 위 3개의 함수는 고차 함수입니다. filter 함수를 예로 설명합니다. 아래 코드는 배열의 요소에서 'Korean'이 아닌 요소들을 모아서 새로운 배열을 반환합니다. var language = [ 'Korean', 'English', 'German' ]; var filterArr = langua.. JavaScript/함수형 프로그래밍 2021. 8. 14. [JavaScript]함수형 프로그래밍 - 데이터 변환 함수형 프로그래밍에서 순수 함수의 요건을 다시 한번 정리해봅시다. 1. 파라미터를 최소 하나 이상 받으며 파라미터에 의해서만 반환 값이 결정됩니다. 2. 값이나 다른 함수를 반환합니다. 3. 부수 효과가 없어야 합니다. 4. 입출력을 수행해서는 안 됩니다. 즉, 순수 함수는 함수 외부의 값을 변경하지 않아야 하고 값을 반환해야 합니다. 대부분 자바스크립트 개발자들은 기존의 값을 변경하지 않고 새로운 값을 반환하는 순수 함수를 많이 사용해왔습니다. 다만, 그 함수들을 함수형 프로그래밍의 개념과 순수 함수와 관련지어서 생각을 못 했을 뿐이죠. 대표적으로 Array.map 함수와 Array.reduce 함수가 존재합니다. 이번 포스팅에서는 배열에서 지원하는 함수들을 사용하여 어떻게 새로운 값을 반환하는지 정리.. JavaScript/함수형 프로그래밍 2021. 8. 14. [JavaScript]함수형 프로그래밍, 순수 함수 함수형 프로그래밍의 핵심 개념 중 하나인 순수 함수에 대해 설명을 합니다. 순수 함수(Pure Function) 아래 요건을 충족하면 순수 함수라고 할 수 있습니다. 1. 파라미터를 최소 하나 이상 받으며 파라미터에 의해서만 반환 값이 결정됩니다. 2. 값이나 다른 함수를 반환합니다. 3. 부수 효과가 없어야 합니다. 4. 입출력을 수행해서는 안 됩니다. EX) 함수 내부에서 콘솔에 로그를 남김, 파일입출력 부수 효과(side effect) 함수 내부에 전역 변수를 사용 함수 내부나 애플리케이션에 있는 다른 상태를 변경 함수 내부에서 다른 함수를 호출(순수 함수는 제외) 순수하지 않은 함수 var globalAge = 50; var userInfo = { name: "JaeSeong", age: 29 }.. JavaScript/함수형 프로그래밍 2021. 7. 18. [JavaScript]함수형 프로그래밍 - 불변성(immutable) 함수형 프로그래밍의 핵심 개념 중 하나인 불변성에 대해 설명을 합니다. 불변성(immutable) 이력서에서 본인의 사진을 숨기는 작업을 진행할 경우 싶은 경우 가능한 방법은 두 가지입니다. (더 창의적이고 다양한 방법이 있겠지만 2가지라고 가정합시다.) 첫 번째 방법은 원본 이력서에서 사진을 빗금 처리하던지 사진을 가립니다. 두 번째 방법은 원본 이력서의 복사본을 만들어 복사본을 수정하는 방법입니다. 두 가지 방법 중에서 사진을 숨기는 작업을 취소해야 하는 경우가 있을 수도 있으므로 안전한 방법은 두 번째 방법입니다. JavaScript와 불변성 자바스크립트에서 데이터가 변경되었을 경우 변하는지 불변하는지 예제 코드를 통해 알아보도록 합니다. 예제코드 변수 변수의 경우에는 원본 변수인 myAge의 값이.. JavaScript/함수형 프로그래밍 2021. 7. 18. [JavaScript]명령형 프로그래밍, 선언적 프로그래밍 프로그래밍 패러다임은 프로그램 개발 방법론을 의미합니다. 그림에서 확인할 수 있듯이 현재까지 수많은 프로그래밍 패러다임이 탄생했으며, 지금도 다양한 연구를 통해 새로운 패러다임을 만들어 나가고 있습니다. 개발자는 본인이 사용하는 프로그래밍 언어와 해당 언어의 패러다임을 이해하여 올바른 프로그램을 개발하는 자세를 갖추어야 합니다. 수많은 패러다임이 존재하지만, 이번 포스팅에서는 선언적 프로그래밍(declarative programming)과 명령형 프로그래밍(imperative programming)에 대해 설명을 합니다. 선언적 프로그래밍 목표를 달성하기 위해 과정보다는 필요한 기술을 우선 중점으로 프로그래밍을 하는 스타일입니다. 함수형 프로그래밍은 선언적 프로그래밍에 포함됩니다. 즉, 선언적 프로그래밍.. JavaScript/함수형 프로그래밍 2021. 7. 17. [JavaScript]1급 시민(First Class Citizen) 자바스크립트에서 함수형 기법을 사용하여 코드를 작성해보셨을 겁니다. 그리고 본인이 함수형 기법을 사용했는데, 함수형 기법이 무엇인지 모르는 분들도 계실 겁니다. 이번 포스팅에서는 함수형 프로그래밍의 1급 시민에 대해 설명을 하며, 예제 코드를 통해 확인을 해봅니다. 함수형 프로그래밍의 역사 「 1930년대 발견한 람다 계산법(lambda calculs)이 함수형 프로그래밍의 시작이라고 할 수 있습니다. 람다 계산법 발견 후 여러 가지 연구를 진행하여 1950년대 존 맥카시(Jonh McCarthy)는 람다 계산법을 활용한 리스프(Lisp)라는 프로그래밍 언어를 만들었습니다. 리스프는 고차 함수라는 개념과 함수가 1급 시민 또는 1급 멤버라는 개념을 구현했습니다. 」 고차 함수 - 다른 함수를 조작하는 함.. JavaScript/함수형 프로그래밍 2021. 7. 17. 이전 1 다음