👣 들어가며 지난 4월 23일부터 인프런 유인동님의 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣는 스터디를 시작했다. 처음에는 단순히 후기 글이 너무 웃겨서 관심이 갔다. 얼마나 강의가 재밌고 유익했으면 저런 창의적인 후기를 남겼을까? 하는 생각이 들며 함수형 프로그래밍에 대해 찾아봤다. 그런데 때마침 회사에서도 함수형 프로그래밍에 대한 바람이 불어서 분기별 목표에 함수형 프로그래밍 접목하는 것을 목표로 적어주신 팀원분들이 많이 보였다. 그리고 유튜브에서도 노마드 코더님이나 드림코딩님, 얄코님의 영상에서 함수형 프로그래밍에 대해 기고한 영상들이 새로운 접근 방법을 알 수 있어서 늘 흥미를 갖고 있었다. 그래서 마침 내가 좋아하는 인프런이고 우리 디프만 동아리에서 아는 사람들과 함께 강의를 ..
함수형 프로그래밍
함수 합성 코드 작성 앞서 flatten에 대해서 배웠는데 이 flatten을 활용해 아래와 같이 함수를 합성하여 활용하곤 한다. 예를 들면 아래와 같다. go(arr, L.flatten, L.filter(a => a % 2), L.map(a => a * a), take(4), reduce(add), log); 위와 같은 함수를 매우 많이 사용하게 되는데, 실무적인 데이터를 사용해서 더 명확하게 이해할 수 있다. 지연성 / 이터러블 중심 프로그래밍 실무적인 코드 const user = [ { name: 'a', age: 21, family: [ { name: 'a1', age: 53 }, { name: 'a2', age: 47 }, { name: 'a3', age: 16 }, { name: 'a4', a..
flatMap flatMap은 최신 자바스크립트 스펙에 등장하는 함수로, map과 flatten을 동시에 수행하는 함수다. console.log([[1, 2], [3, 4], [5, 6, 7]].flatMap(a => a)); // (7) [1, 2, 3, 4, 5, 6, 7] 이렇게 기본 Array 프로토타입의 flatMap 메서드를 사용하면 하나의 배열로 만들어주며, 함수를 적용한다. 이는 배열이 아닌 값이 원소로 들어가도 동일하게 작동한다. console.log([[1, 2], [3, 4], [5, 6, 7], 8, 9, [10]].flatMap(a => a)); // (10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 여기서 함수를 다르게 하여 flatMap을 최대한 활용할 수 있다..
L.flatten 함수 flatten이라는 함수를 만들고자 한다. 해당 함수는 임의로 배열이 섞여 있는 배열을 하나의 배열로 전환해주는 함수다. 또한, 지연 평가를 적용할 수 있는 함수다. 예를 들어, 아래와 같은 배열이 있다고 한다면 [[1, 2], 3, 4, [5, 6], [7, 8, 9]]; 이를 하나의 배열로 처리해 아래와 같이 만들어 줄 수 있다. [1, 2, 3, 4, 5, 6, 7, 8, 9] 이제 본격적으로 함수를 생성한다. const isIterable = a => a && a[Symole.iterator]; L.flatten = function *(iter) { for (const a of iter) { if (isIterable(a)) {} for (const b of a) yield..