함수형 프로그래밍과 JavaScript ES6+ 응용편

함수형 프로그래밍과 JavaScript ES6+ 응용편

(28개의 수강평)

702명의 수강생
Javascript함수형 프로그래밍Back-EndFront-End
winter-breaker 프로필

질문드립니다 winter-breaker 2일 전

const b = a * a

는 어떻게 가능한가요? 

const 자체가 객체안에서 값을 변경하는 건 문제가 없는 것은 아닌데 

const b 처럼 한번 const로 b를 할당 했는데 for 문을 돌고 나서 다시 const b = a * a 처럼 b에다가 값을 바꾸는 행위를 하면 const b가 has already been declared라는 에러 메시지가 나올꺼 같은데 문제 없이 통과되는 이유가 뭔가요??

1
boutime2017 프로필

퍼포먼스/가독성 boutime2017 9일 전

초보적인 질문입니다 ㅠㅠ

1.지연 평가/즉시 평가

예제에서 L.map과 L.filter그리고 reduce를 조합해서 써주셨는데요

이전 강의부터 궁금했던 건데 지연 평가를 한다고 해도, reduce의 경우 takeAll처럼 결국 이터러블/이터레이터를 모두 평가를 해야되기 때문에 지연 평가나 즉시 평가나 시간복잡도/퍼포먼스적인 부분에서 차이가 없는 것이 아닌가 생각되는데 이것이 맞나요? 

제 생각에 지연 평가는 take(작은 수)로 이터러블의 모든 요소를 순회/평가하지 않아도 되는 경우에만 의미가 있는 것 같은데, 뭔가 놓친 부분이 있는 것은 아닌지 궁금합니다

2.reduce only / reduce + map + filter

강의에서 말씀해주신 부분에서만 추측해보자면, 함수 합성으로 하시는 이유가 추상화/재사용성/가독성 등의 이유가 주된 이유인 것 같습니다.

그런데, map, filter, reduce의 조합이면 일단 순회를 3차례 돌아야 하는 것이고, reduce만 쓰면 순회는 1차례에서 끝날 텐데, 혹시 퍼포먼스적인 부분에서는 차이가 없나요?

1번 질문이랑 연결해서 (이터러블의 모든 요소를 순회해야 한다면) 지연 평가를 한다고 해도 평가를 그때 그때 필요한 시점에 하는 것일 뿐, 평가를 덜해도 되는 것이 아니기 때문에 제 생각에는 최종 평가까지 걸리는 시간이 더 들 것 같은데...

(console.time을 찍어봤지만 간단한 예제라서 그런지 실행 시간에는 별 차이를 느끼지 못했습니다...)  

2
boutime2017 프로필

for문이 더 적게 돈다는 의미? boutime2017 9일 전

여기서 for 문이 더 적게 돈다는 의미를 명확하게 이해하지 못해서 질문드립니다.

명령형일 때  a % 2를 평가하여 참이면 그 아래 코드를 실행하고, 아니면 실행하지 않는 것인데

L.filter에서도 결국 .next()로 순회를 돌 때 동일한 a % 2를 평가하여 다음 값을 yield해서 내보내는 것으로 이해했습니다.

그렇다면, 명령형일 때와 함수형일 때의 차이는 평가가 지연되었느냐, 그렇지 않느냐의 차이인 것인가요?

1
Chungmin Myung 프로필

동시성 부하 조절 강좌에서 질문입니다. Chungmin Myung 2달 전

L.map(L.map(f => f()))에서 함수를 실행해서
L.map을 적용하는 것은 알겠는데, 
추가적으로 L.map을 해주는 이유가 궁금합니다.

그리고 그 이후 하단에 _.each(_.each($.addClass('fade-in')))을 해주는 이유도 좀 궁금합니다.

감사합니다.(멋진 강의 감사합니다.)

1
김선엽 프로필

node.js에서 fxjs는 어떻게 사용하는건가요? 김선엽 2달 전

안녕하세요. 강의 잘 듣고 있습니다.

아... 질문 올렸다가 삽질하다보니 해결되어 계속 질문내용을 수정하게되네요 ^^;

1.

lodash에서 _.go 같은 기능은 없는건가요?

아래와 같이 JSON.stringify를 호출되게 해보려 하는데 잘 안되어서요.

_.go(list,
_.filter((item) => item.name === name),
_.head(),
JSON.stringify
);

_(list)

.filter((item) => item.name === name)

.header() 까지는 잘 되는데요...

그리고  _와 L은 섞어 쓰면 오류가 나나보네요.

2.

1번 질문에서 L.head()의 결과가 undefined나 null이 되었을때는 {} 를 JSON으로 만들고 싶은데 어떻게 하면 좋을까요?

생각해보니 defaultTo같은걸로 처리하면 되긴 할꺼 같긴하네요.

3.

아래 두 코드는 결과가 같을꺼라 기대했는데 왜 자꾸 에러가 나는지 알 수 있을까요?

const _ = require("fxjs/Strict");
var result = _.go([1,2,3,4,5], _.reduce(_.multiply3));
console.log(result);

const _ = require("lodash");
var result = _([1,2,3,4,5]).reduce(_.multiply3);
console.log(result);

fxjs에서 _.reduce만을 썼을때는 문제는 없는데 go와 같이쓰면 문제가 발생하네요.

아래와 같이 하면 되긴 하는데 좀 어색하네요. ㅠㅠ

var result = _.go([1,2,3,4,5],
    _.curryN(2_.reduce)(_.multiply3));
console.log(result);

답변 부탁드립니다. 감사합니다.

1
digilog 프로필

FP의 단점(?)을 극복하기 위한 질문 드립니다. digilog 2달 전

FP를 보면 결국 기존의 데이터를 수정하지 않고 새로운 카피본을 만드는 것인데, 메모리의 낭비로 이어질 수 있어서 작은 데이터에서는 문제는 없으나 대용량 데이터에서는 문제가 될 것 같습니다. 강의를 들으면서 이 문제의 해결 방안에 대한 기대를했었는데 별다른 언급이 없었네요.

이제 실무에 적용하려고 검토 및 준비를 하다보니 대용량 데이터 핸들링에서 이슈가 분명히 나올것 같아서관련자료를 찾아보니 이러한 문제점을 해결하기 위해서 persistent data structure를 사용하는것 같은데, 알려주신 FP와는 어떻게 접목시켜야 하는지요...? (결국 immutable.js 와 같은 오픈소스를 사용해야 하는지요...)

그동안 강의를 들으며 공부한 내용을 실제로 활용하기 위해서(올려주신 3개의 강의 모두 듣고 현재도 계속 반복중입니다) persistent data structure 와 FP에 대한 활용, 또는 persistent data structure가 아니더라도 FP에서 대용량 데이터를 다루는 방법에 대한 강의 또는 설명이 반드시 있어야 될 것 같습니다.

이야기가 약간 벗어난것 같은데...질문의 요점은

- FP로 대용량 데이터 핸들링시에 어떻게 처리를 해야하는것이 효율적인지에 대한 질문입니다. 

끝으로 좋은 강의 감사합니다

3
iternity 프로필

fxsql 강의는 안열리나요? iternity 2달 전

강사님 깃헙에서 코드를 보다가

QUERY `
  SELECT * FROM table1 WHERE table2_id IN (
    SELECT id FROM table2 WHERE type = ${type} ORDER BY id DESC LIMIT ${limit}
  )
`;

이런식으로 쿼리를 날리는 걸 봤는데요. 

함수의 문법이 아닌데 어떻게 함수처럼 쿼리가 보내지나요? 코드를 보고있는데도 잘 모르겠네요.

함수형 sql 강의도 열렸으면 좋겠어요

2
castinglife 프로필

인라인 그리드 셀 편집 기능구현 문의 드립니다. castinglife 3달 전

좋은 강좌 강사드립니다.

다름이 아니라 궁금한 부분이 있어 문의 드립니다.

간단한 ajax를 이용한 그리드 인라인 편집을 구현해 보려고 하고 있습니다.

임의의 레코드의 셀인 td 나 input 을 클릭 값을 변경해 주었을때

클릭된 td 상위 태그인 tr 하단에 저장 버튼 박스를 붙여 셀 값을 업데이트해 주려고 합니다.

혹시 간단한 예시나 팁을 주실수 있을까요?

1
한지훈 프로필

마지막챕터의Images가 90개라고 나오는데요.. 소스를 얻을수 있을까요? 한지훈 3달 전

어디서 얻는지 모르겠습니다 ㅠㅠ..

1
파이 프로필

구조분해 문의 파이 4달 전

L.takeWhile(({cars}) => cars.length == 4) 까지는 이해가 가는데요.

L.takeWhile(({cars: {length}}) => length == 4) 여기에서 cars: ['철수', '영희', ...] 과 같이 배열이 value에 해당하는데, 저 배열부분을 {length}로 구조분해가 되는게 이해가 안 갑니다.

1
vanila 프로필

user.age >= 30에 관하여.. vanila 7달 전

안녕하세요, 오랜만에 다시 강의를 듣기 시작했는데..

_.reduce((total, user) => {
        if(user.age >= 30) return total;
        return total + user.age;
      }, 0, users)

부분에서 if(user.age >= 30) 이라면 35, 와 34 를 리턴하여 값이 69가 아닌 왜 77이 나오는지 궁금합니다..

1
blgf6190 프로필

fxjs 슬랙 채널에 초대 받고 싶습니다. blgf6190 8달 전

초대해주시면 감사하겠습니다.

1
이성필 프로필

fxjs가 lodash나 ramdajs에 비해 얻는 장점이 뭐가 있을까요? 이성필 8달 전

실무에서 함수형 프로그래밍 도입을 위해 라이브러리들을 고민하고 있습니다.

거론되는 라이브러리는 ramdajs, lodash가 있구요.

아무래도 fxjs를 통해 FP를 배우기 시작해서 저에게 제일 편한건 fxjs이긴 합니다.

다만 위 라이브러리들이 더 글로벌하게 쓰이고 있어서 팀원들을 설득하기 위해 알아보고있지만,

아직 경험이 많이 없다보니 그런 안목이 아직 부족합니다.

위 라이브러리들을 훑어 봤을 때

fxjs로 transducer를 더 직관적으로 작성할 수 있고,

병렬평가가 가능합니다. 이외에도 여타 다른 라이브러리에 비해 장점으로

무엇을 꼽을 수 있을까요..?

그리고 fxjs2의 경우 tree shaking을 지원하는지도 궁금합니다

3
Daniel Lee 프로필

fxjs를 사용한 백엔드 + 프론트엔드 구성에 참고할만한 예제가 있을까요? Daniel Lee 11달 전

안녕하세요. 최근 기본편 + 응용편을 수강하고있는 수강생입니다. 인동님의 강의 덕분에 함수형프로그래밍의 매력에 빠지게 되었습니다. 정말 감사합니다.

제가 강의를 모두 들은 후 실무에 fxjs + mql를 사용하여 백엔드 + 프론트엔드 구성을 해보려하는대요. 일단은 express + fxjs + mql + vanilla js를 사용하여 구성해보려 하고있습니다. 하지만 어떤식으로 프로젝트를 구성하고 라이브러리를 사용하는것이 best practice일지 감이 잡히지 않는것 같습니다... 제 지식이 부족한탓이지만 혹시 해당 구성에대한 예제가 있을까요?

다시한번 좋은강의 감사드립니다!

 

 

8
WebFront stove 프로필

"reduce 하나 보다 map + filter + reduce" 관련해서 질문드립니다~ WebFront stove 11달 전

강사님 강의 잘 봤습니다. "reduce 하나 보다 map + filter + reduce" 관련해서 질문드릴게 있어서요.

함수형 개발 기법 중에 transducer라는 게 있는 걸로 알고 있습니다. 어느정도 개념만 알고 있어서 이와 관련해서 질문 좀 드리려고 합니다.

transducer 관련한 글을 보면 map, filter, reduce 등을 여러번 쓰는 것보다 reduce protocol을 따르는 map, filter등을 사용해서 compose(pipe)등으로

합성해서 사용하는게 많은 데이터를 다룰때 효율적이다라고 알고 있습니다(실제로 ramdajs, rxjs 등이 이러한 기법으로 만들어진걸로 알고 있구요).

강사님은 대용량 데이터를 다뤄야 할때도 reduce 하나 보다 map + filter + reduce 이렇게 사용을 하시나요?

map + filter + reduce를 사용 하는 데 퍼포먼스 상 굳이 신경쓸 정도의 손해는 없는지 다른 의견이 있으신지 궁금합니다.

 

감사합니다.

 

4
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스