퍼포먼스/가독성
285
작성한 질문수 16
초보적인 질문입니다 ㅠㅠ
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
4
1.
시간복잡도면에서는 차이가 없습니다. 다만 array를 만들지 않는다는 차이 정도는 있습니다. array의 크기가 클수록 이점이 있을 수 있습니다.
지연 평가의 퍼포먼스 차이가 크게 나는 경우는 결국 take 를 하게 되는 경우입니다. find, some, every 같은 함수 혹은 유사한 로직을 구현할 때 지연평가의 그런 혜택을 받게됩니다. 퍼포먼스가 좋으면서 좋은 표현의 코드를 얻게 됩니다.
평가를 지연하는 성질을 이용하는 것은 단순히 성능만을 위해 사용하는 개념은 아닙니다. 개발자가 사고하는 방식 자체를 살짝 바꿉니다. 퍼포먼스 튜닝을 걱정하지 않으면서 평가를 지연해둘 수 있다는 점은 많은 로직을 편하게 생각하고 쉽게 만들 수 있게 도와줍니다.
또다른 측면으로는 평가를 지연해두었기 때문에 이후에 동시적으로 평가할 것인지를 선택할 수 있게도 됩니다. 퍼포먼스적인 측면외에도 평가를 지연하는 것으로 얻는 것은 이처럼 여러가지 이점들이 있습니다.
2.
reduce only로 복잡한 로직을 다루는 것은 명령형이나 다름 없기 때문입니다. 그리고 map+filter+reduce 조합으로 순회를 3차례 돈다고 하더라도 reduce only에서 3line 의 코드를 실행하는 것과 동일한 시간 복잡도를 갖게 됩니다. 따라서 엄청난 퍼포먼스 차이가 있을 수 없습니다.
종합하여 말씀드리자면 map+filter+reduce 조합으로 프로그래밍 하는 것이 퍼포먼스적으로 이슈가 거의 없으면서 훨씬 좋은 표현력을 얻는 방법입니다.
감사합니다. :)
이미지 동시성 다루기
0
116
2
클로저와 같은 함수형 프로그래밍 공부
0
192
2
fx.js
0
439
2
fxjs 라이브러리 takeL 관련하여 질문드립니다.
0
344
2
[ 비동기 상황에서의 Lazy, Strict 기법이 혼합된 평가 ] 에 대한 이해
0
528
1
input값이 이터러블 함에도 range를 쓴 이유가 궁금합니다.
0
468
1
질문있습니다!
1
372
2
DB Insert관련
0
657
2
강의에 대한 제언
2
599
1
DOM 조작 관련 질문입니다.
0
408
1
L.map, L.filter
0
613
1
indexBy 함수에 대한질문입니다.
0
404
2
해당 강의를 듣고 나면
0
397
1
내용없음
0
236
1
함수 추출에 대한 고민
1
286
1
뷰 포트에 보이는 엘리먼트만 이미지 로드하고 싶을 때
1
327
1
기존에 반복문이 1개 돌던거를 이렇게하면 2번 도는데...
0
242
1
array in object... 는 어떤 식으로 재귀가 가능할까요..?
0
271
1
queryToObject 질문드립니다.
0
359
1
재귀는 어떻게 표현할 수 있을까요?
0
315
1
모든 명령형 => 함수형 가능한가요?
0
322
1
명령형 => 함수형 변환
0
340
2
이해한게 맞을까요?
0
214
1
iter의 개별 elements 에 data 를 삽입 또는 변형해서 삽입하는 경우엔 map 으로 제어를 하는게 맞을까요?
0
263
2





