Frontend/JS

[JavaScript] map, filter 계열 함수들이 가지는 결합 법칙, 지연평가의 장점

턴태 2023. 5. 5. 23:52

map, filter 결합법칙

특정한 방식으로 다르게 평가 순서를 바꿔도 똑같은 결과를 만든다는 결합 법칙을 가진다.

 

사용하는 데이터가 무엇이든지, 사용하는 보조 함수가 순수 함수라면 무엇이든지 아래와 같이 결합한다면 둘 다 결과가 같게 출력된다.

[[mapping, mapping], [filtering, filtering], [mapping, mapping]]
=
[[mapping, filtering, mapping], [mapping, filtering, mapping]]

즉시 평가하지 않고 지연 평가를 하기 때문에, mapping -> filtering -> mapping의 과정은 동일하게 처리되게 된다. 가로로 계산을 진행하는 것이나, 세로로 하나하나 함수를 거치는 것이나 동일하게 처리된다.

 

지연평가의 장점

함수와 함수가 리턴값을 통해서 내가 원하는 시점에 평가하고자 할 때 사용할 수 있도록 지연성 있게 코드를 작성할 수 있다. 이는 다른 라이브러리 등에서 코드를 가져와 사용하는 것이 아닌 순수한 자바스크립트에서 객체로 사용할 수 있기 때문에 조합성이 높은 편이다.

 


이로서 본 강의를 절반 정도 수강했다. 처음에는 이터러블을 왜 배우는 것인지 생소하였다. 아무래도 깊게 생각해본 적이 없는 코드이고 공부의 필요성을 느끼지 못했기 때문이다. 이터러블에서 점점 더 나아가 제너레이터를 배우고, 사용자 정의 함수를 만들면서 go, pipe, curry로 함수를 합성하여 코드를 간단하게 만드는 것까지 확인헀다. 그리고 최근에는 지연평가를 도입해, 기존의 map, filter 등의 함수를 더 낮은 시간 복잡도로 사용할 수 있었다. 이러한 일련의 과정이 개별적으로 놓고 보았을 때보다 서로 연계해서 확인했을 때 연관성이 깊고 꼭 알고 있어야 하는 지식들이었기 때문에 강의 내용을 이해하는 데 좋았고, 지연 평가의 과정과 용도 및 효율성을 알 수 있어서 좋았다.

 

출처: 인프런 함수형 프로그래밍과 JavaScript ES6+