개발자

lodash 체이닝(_.chain)은 왜 사용하나요?

2023년 01월 27일조회 861

안녕하세요 로대쉬를 사용하다가 궁금한점이 있어서 질문 남깁니다. sortBy.map.filter 이런식으로 chain메서드 없이도 체이닝을 할 수 있는데 chain 메서드는 왜 사용하는지 어떤 장점이 있는지 문득 궁금해졌습니다. 혹시 이유를 아시는 분 있으시면 답변해주시면 큰 도움이 될 것 같습니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

인기 답변

Gorilla.Kim님의 프로필 사진

사실 로데시 함수에서 chain 함수는 함수형 프로그래밍을 쉽게 구현하기 위해서 사용하는 함수이지만, 앞서 유근수님께서 답변주신것 처럼 지연평가가 필요해서 더 많이 사용되는것 같아요. (지연평가도 함수형 프로그래밍에 일부에요!) 일반적으로 JS에서 지원되는 map, filter 와 같은 람다식 함수들은 n 번의 시간 복잡도를 가집니다. 만약 map(...).filter(...) 식을 가진다면 2n 만큼의 복잡도를 갖게 되어요. 하지만 지연평가는 이터레이터 기법을 이용해서 여러 반복적인 작업을 n번의 순회에 모두 처리하는 기법을 사용합니다. (매 순회마다 처리해야할 로직들을 한번에 처리하며 다음 순회로 넘어가는 방법을 사용합니다) JS의 제너레이터 라는 문법을 이용하여 이터러블한 함수를 구현하고 이를 통해 지연평가를 합니다. 더 자세한건 여러 블로그를 참고하시면 될거에요 : ) "그러면 무적권! 지연평가를 활용하는것이 짱짱 좋은것인가?" 여기에 답변은 No 입니다 ㅎㅎ 그 이유는 지연평가가 여러 반복 로직이 복잡하게 엮여있는 경우에는 성능이 좋은것이 확실하나, 단순 반복에서는 map, filter 가 더 성능이 좋습니다. 이유는 단순히 map, filter는 언어 자체에서 지원하는 기능이기 때문에 반복 순회를 처리하는 과정이 더 효율적으로 짜여있기 때문이에요. 반면에 제너레이터를 이용한 구현시에는 .next()라는 메서드 실행을 통해 다음 순회로 넘어가기 때문에 JS 로직적으로 순회가 처리되어요. (아무래도 명령어 처리 효율이 안좋은 JS보다는 더 로우 레벨 언어로 구현된 map, filter 가 더 빠르겠죠?) 그러면 언제 지연평가를 쓰면 좋을까요? * 대상에 걸어야 하는 반복 로직의 갯수가 많을때 지연평가 효율이 좋습니다. (map(...).filter(...).map(...)...) 때에 따라서는 이러한 로데시 함수 구현없이 reduce 라는 순수 JS 문법을 통해 지연평가로 구현해야할 로직을 대신할수도 있어요! 여러 블로그 및 사이트에서 순수 자바스크립트로 구현을 했을때와 로데시로 구현을 했을때의 성능비교한것을 정리해주고 있어서 해당 자료도 같이 살펴보는 것을 추천드립니다 : ) 🎉 함께 검색해보면 좋은 키워드 🎉 * lodash * 함수형 프로그래밍(FP) * js generator * iterator * 지연 평가 구현 * lodash vs ES6 * reduce

유근수님의 프로필 사진

유근수

개발자2023년 01월 30일

와우 generator를 사용한다는건 처음 알았네요~! 성능 이슈도요!! 좋은 답변 감사드립니다!

profile picture

익명

작성자

2023년 01월 30일

상세한 담변 정말 감사합니다! 키워드도 확인해볼게요

사각커피우유님의 프로필 사진

사각커피우유

엘박스 프론트엔드 엔지니어2023년 02월 01일

좋은 내용 공유 감사합니다!ㅎㅎ 그런데 한 가지 궁금한 것이, map(...).filter(...) 실행의 시간 복잡도는 O(n^2) 이 아니라 O(2n) 아닌가요?! n 개의 배열 요소를 2번 전체적으로 순회하는거라고 생각했습니다!

Gorilla.Kim님의 프로필 사진

Gorilla.Kim

매드업 프론트엔드 개발자2023년 02월 01일

@사각커피우유 님! 생각해보니 커피우유님 말씀이 맞네요! 😀 단순히 배열순회를 두번하는것이니 2n이 맞습니다! 알려주셔서 감사드려요 ㅎㅎ (본문 내용도 업데이트 해두겠습니다👍👍)

인기 답변

유근수님의 프로필 사진

lazy evaluation 키워드로 검색해보시면 좋울 것 같습니더~

profile picture

익명

작성자

2023년 01월 29일

lazy evaluation이라는 키워드가 있었네요. 좋은 정보 감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!