본문 바로가기

함수형 프로그래밍

자바의 함수형 프로그래밍 https://www.inflearn.com/course/the-java-java8/dashboard 더 자바, Java 8 - 인프런 | 강의 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이 www.inflearn.com 강의를 공부하며 생각을 정리한 글입니다. 자바의 함수형 프로그래밍 자바스크립트로 함수형 프로그래밍에 입문해서 그런지 자바로 함수형 프로그래밍을 하는 것이 뭔가 낯설고 신기했다. 자바스크립트는 타입이 없기 때문에 그저 순수함수와 고차함수를 만들어내는 데에만 집중했었다. 하지만 자바에는 타입이 존재한다. 따라서 함수형 프로그래밍을 하려면 어떤 함수.. 더보기
JS 함수형 프로그래밍 - 병렬처리 병렬적 처리 지금까지는 프로미스의 resolve() 함수가 결과를 바로 만들어내도록 해서 콜스택이 비워지면 프로미스들이 즉시 처리되도록 예제가 구성되었었다. 만약 프로미스가 시간이 어느정도 걸리는 작업들이라면 지연평가에서는 어떻게 처리되고 있을까? const delay1000 = a => new Promise(resolve => { setTimeout(() => resolve(a), 1000); }) console.time(''); go([1,2,3,5,5,5,5], L.map(a => delay1000(a*a)), L.filter(a => a%2), reduce(add), console.log, a => console.timeEnd('')); 위 코드는 go함수의 첫번째 인자인 배열 내부에 있는 원소 .. 더보기
JS 함수형 프로그래밍 - 비동기, Promise [2] go, pipe, reduce 에서의 비동기 제어 이해하기 많이 어려웠던 코드... 이벤트 루프의 동작을 고려하며 분석해보자. 우선 go 함수와 reduce함수를 통해 promise도 다룰 수 있도록 만들 수 있다. reduce코드를 조금만 수정하면 된다. go(1, a => a+ 2, a=> Promise.resolve(a + 100), //Promise 등장 a => a+ 20, a => a+ 200, (a) => console.log('go 결과', a)); const reduce = curry((f, acc, iter)=> { if(!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } else { iter = iter[Symbol... 더보기
JS 함수형 프로그래밍 - 비동기, Promise [1] 비동기 다루기 JS에서 비동기 동시성 프로그래밍을 하는 방법은 두가지이다. 1. 콜백 2. 프로미스 , async , await function add10(a, callback) { setTimeout(() => callback(a+10), 100); } //전달받은 콜백함수에 100ms 있다가 a + 10 을 해서 넣어주는 함수 function add20(a) { return new Promise(resolve => setTimeout(() => resolve(a+20), 100)); } add20(5) .then(add20) .then(add20) .then(add20) .then(add20); add10과 add20의 차이는 add20은 프로미스를 리턴한다는 것이다. 이는 중첩해서 사용할 경우에 큰.. 더보기
JS 함수형 프로그래밍 - 지연성 지연성을 가지는 함수들 지연성은 es6부터는 공식적으로 약속된 규약이 되어, 지연성을 다루는건 js의 고유한 규칙이 되었다. (결합과 합성이 가능) 1. range 함수 const range = n => { let res = []; for(let i = 0 ; i < n ; i ++) { res.push(i+1); } return res; } const L = {} L.range = function *(n) { let i = -1; while (++i < n) yield i; return; } console.log(range(5)); // [1,2,3,4,5] console.log(L.range(5)); //Object [Generator] {} const Literable = L.range(5) con.. 더보기
JS 함수형 프로그래밍 - 이터러블, 이터레이터, 제너레이터 우선 함수형 프로그래밍 공부를 시작하며 알아야할 용어가 있다. 평가 : 코드가 계산되어 값을 만들어내는 것 일급함수 : 자바스크립트에서 함수는 일급함수이며 이는 함수가 값으로 다뤄질 수 있음을 의미한다. 고차함수 : 함수를 인자로 받아서 다루는 함수 함수형 프로그래밍에 대해서 익숙해지려면 우선 위의 단어들부터 익숙해져야했다 😂 이터레이터와 이터러블, 제너레이터 먼저 이터레이터와 이터러블에 대해 알아보자. // es5 에서의 리스트 순회 const list = [1,2,3] for (let i =0 ;i < list.length ; i++) { console.log(list[i]); } //es6에서의 리스트 순회 for(const a of list) { console.log(a); } es6의 순회는 단.. 더보기