Promise.all()
의 기능과 필요한 이유에 대해서 설명해주세요.
<aside> 💡 Promise.all()
Promise.all()은 여러 비동기 작업을 동시에 처리하고 순서를 유지하기 위해서 사용합니다. Promise를 요소들로 하는 배열은 전달인자로 받아 이후에 then으로 resolved된 비동기 작업을 처리할 수 있습니다.
공개 API를 쓰는 경우 필요한데, 공개 API에서 한번에 100개의 아이템만 조회할 수 있는 경우 일반적으로 Promise나 async/await을 사용하면 순차적으로 100개의 비동기 작업의 실행과 리턴을 기다려야만 합니다. 동기적인 코드 실행과 실행 시간에 별 차이가 없습니다. 하지만 Promise.all()을 쓰면 컴퓨터와 Node.js가 가능한 만큼 여러 쓰레드를 사용하여 작업할 수 있어서 코드 실행 시간을 단축할 수 있습니다.
</aside>
순서가 보장될 필요가 없는 여러 개의 비동기 처리를 병렬(동시에 작동)로 하고 싶을 때 필요합니다.
만약 실행 순서가 중요한 경우라면 async-await 사용해야합니다.
Promise.all([a(),b(),c()]) ⇒ a,b,c 순서대로 실행되지만 앞의 함수가 완료되는 것을 기다리진 않고, 마지막으로 완료되는 함수까지 기다렸다가, 실행 순서대로 값을 반환합니다.
그래서 각각의 완료 값을 비구조화 할당 할 수도 있습니다.
또 reject 되는 것이 하나라도 있으면 즉시 실행을 멈추기 때문에 부분적인 실패/성공에는 대응할 수가 없습니다. 만약 실행하고 싶은 함수들이 서로 의존적이지 않다면 promise.allSettled로 성공, 실패 여부와 관계없이 결과값을 배열로 받을 수 있습니다.
순수함수란 무엇인가요? 불변성과 사이드 이펙트와 연결하여 설명해주세요.
<aside> 💡 순수함수
순수함수는 함수형 프로그래밍에서 자주 사용되는 개념으로, 오직 함수의 입력만이 함수의 결과에 영향을 주는 함수를 의미합니다. 또한, 사이드 이펙트가 없어야 합니다. 사이드 이펙트는 쉽게 말해서 외부 변수를 참조하거나, 변경하는 모든 종류의 코드를 의미합니다. 즉, 순수함수는 함수 body 내에 있는 코드만 점검하면 되기 때문에 간결하게 코드를 작성하고 사고하는데 도움이 됩니다.
자바스크립트에서 순수함수를 제작하기 위해서 데이터의 불변성을 유지하는 것이 중요합니다. 함수의 전달인자로 참조 자료형이 전달되는 경우, 해당 객체 자체를 바꿔서 사이드 이펙트를 만들 수 있고, 이는 해당 데이터의 불변성을 손상시킬 수 있습니다. 그래서 배열의 불변성을 보장하는 메서드인 map, filter, reduce 등이 각광을 받게 되었습니다.
</aside>
순수 함수란, 오직 함수의 입력만이 함수의 결과에 영향을 주는 함수입니다.