8주차 과제 Review

김진권·2021년 9월 13일
0

code review

목록 보기
4/4

1. 요구 사항

8주차 과제는 비동기 흐름을 이해하고 함수를 완성하는 것


2. 개선해야 할 사항

1) Javascript

1️⃣ tasks[taskNumber]의 task 키워드가 반복되기 때문에, index라고 명칭해주는 것이 가독성에 좋을 것 같다.

  function doTask(taskNumber) {
    tasks[taskNumber](function (value) {
      results[taskNumber] = value;
      
  ➡️  
    
  function doTask(index) {
    tasks[index](function (value) {
      results[index] = value;

2️⃣ value도 이상하지는 않지만, callback 인자로 넘겨 받는 것이 결과 값이기 때문에 result라 명칭하면 좀 더 분명해질 것 같다.

    tasks[taskNumber](function (value) {
      
    ➡️  
      
    tasks[taskNumber](function (result) {

3️⃣ 매번 결과를 콜백함수로 받을 때마다 results를 filter 해주는 것은 비효율적일 것 같다.
만약 results가 무수하게 많은 n개의 값을 가지고 있다면 length를 계산하는 것만으로도 시간 소요가 커질 것이기 때문에
count 변수를 하나 만들어서 callback이 실행되면 count 값을 증가시키고 그 값을 최종 tasks 길이와 비교하면 더욱 효율적일 것.

function parallel(tasks, finalCallback) {
  var results = [];
  var taskCount = 0;

  ...

  function doTask(index) {
    tasks[index](function (result) {
      results[index] = result;
      taskCount++;

      if (taskCount >= tasks.length) {
        finalCallback(results);
        return;
      }
    });
  }

  ...
}

4️⃣ if의 condition은 boolean으로 평가되니 아래와 같이 표현될 수 있다.

  if (tasks.length === 0) {
    
  ➡️  
    
  if (!tasks.length) {

3. 멘토님의 평가

안녕하세요. 진권님 마지막 과제까지 수고하셨습니다.👏👏
전체적으로 잘 작성해주셔서 크게 코멘트 드릴 부분은 없었던 것 같습니다.
비동기 로직은 끝나는 시점을 정확히 파악하기 어렵기 때문에 콜백 함수를 통해 제어를 할 수 있습니다.
작성해보시면서 느끼셨겠지만 콜백 함수를 통해 제어할 경우 무수한 비동기 작업에서는 끊임 없는 depth로 인해 (callback hell)
가독성이나 유지 보수를 어렵게 만듭니다. 그렇기 때문에, ES6에서 Promise를 통해 기존 콜백 함수의 문제점을 타파하기 나왔었고,
추후 좀 더 동기적인 코드처럼 읽히기 쉽도록 async/await같은 Promise의 synthetic sugar가 나왔습니다.
하지만 결과적으로 비동기의 근간은 waterfall, parallel과 같은 콜백 함수패턴이기 때문에 앞으로 사용하시게 될 다양한 비동기 API의 적절한 사용을 위해 해당 과제를 충분히 복습하고 넘어가셨으면 좋겠습니다. 아래의 링크는 각 비동기 API가 어떠할 때 사용하기 적합한지 등에 대한 문서이니 한번 살펴보시면 좋을 것 같네요.
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Choosing_the_right_approach
마지막까지 과제까지 너무 잘하셨고, 앞으로의 여정도 응원하겠습니다.🎉👍

profile
start!

0개의 댓글