[JavaScript] map, filter 계열 함수들이 가지는 결합 법칙, 지연평가의 장점
map, filter 결합법칙
특정한 방식으로 다르게 평가 순서를 바꿔도 똑같은 결과를 만든다는 결합 법칙을 가진다.
사용하는 데이터가 무엇이든지, 사용하는 보조 함수가 순수 함수라면 무엇이든지 아래와 같이 결합한다면 둘 다 결과가 같게 출력된다.
[[mapping, mapping], [filtering, filtering], [mapping, mapping]]
=
[[mapping, filtering, mapping], [mapping, filtering, mapping]]
즉시 평가하지 않고 지연 평가를 하기 때문에, mapping -> filtering -> mapping의 과정은 동일하게 처리되게 된다. 가로로 계산을 진행하는 것이나, 세로로 하나하나 함수를 거치는 것이나 동일하게 처리된다.
지연평가의 장점
함수와 함수가 리턴값을 통해서 내가 원하는 시점에 평가하고자 할 때 사용할 수 있도록 지연성 있게 코드를 작성할 수 있다. 이는 다른 라이브러리 등에서 코드를 가져와 사용하는 것이 아닌 순수한 자바스크립트에서 객체로 사용할 수 있기 때문에 조합성이 높은 편이다.
이로서 본 강의를 절반 정도 수강했다. 처음에는 이터러블을 왜 배우는 것인지 생소하였다. 아무래도 깊게 생각해본 적이 없는 코드이고 공부의 필요성을 느끼지 못했기 때문이다. 이터러블에서 점점 더 나아가 제너레이터를 배우고, 사용자 정의 함수를 만들면서 go, pipe, curry로 함수를 합성하여 코드를 간단하게 만드는 것까지 확인헀다. 그리고 최근에는 지연평가를 도입해, 기존의 map, filter 등의 함수를 더 낮은 시간 복잡도로 사용할 수 있었다. 이러한 일련의 과정이 개별적으로 놓고 보았을 때보다 서로 연계해서 확인했을 때 연관성이 깊고 꼭 알고 있어야 하는 지식들이었기 때문에 강의 내용을 이해하는 데 좋았고, 지연 평가의 과정과 용도 및 효율성을 알 수 있어서 좋았다.
출처: 인프런 함수형 프로그래밍과 JavaScript ES6+