211115_개발자 준비하기(44일차) - 고차함수 복습(Underbar)

주형(Jureamer)·2022년 1월 4일
0
post-custom-banner

배운 것(끄적끄적)


  • 고차함수 복습
    • 일급객체 특징
      • 변수에 할당(assign)할 수 있다.
        const num = 3
        let doubleNum = function(num) {
        	return num * 2
        };
      • 다른 함수의 인자로 전달 될 수 있다.
        function double(num) {
        return num * 2; 
        }
        
        function doubleNum(func, num) {
            return func(num)
        }
        
        let output = doubleNum(double, 4);
        console.log(output); //8
      • 다른 함수의 결과로서 리턴될 수 있다.
        function adder(added) {
        	return function(num) {
        		return added + num;
        }
        
        let output = adder(5)(3) // -> 8
        
        let add5 = adder(5)
        
        console.log(add5(3)) // -> 8
    • forEach, find, filter, map, reduce, sort, some, every
    • 추상화란?
      • 기계가 작동하는 원리(0, 1)로 프로그램을 구현하는 것이 아닌, 추상화된 프로그래밍 언어로 코딩하고 결과를 도출하는 것.
  • 고차함수 Callback 이용해서 Underbar Library 구현하기
    • Underbar 라이브러리는 배열 메소드가 브라우저 등에서 자체적으로 지원되기 전, 선배 개발자들이 배열과 객체들을 다루기 위해 만들고 사용했던 라이브러리다. 이것의 모티브가 되는 라이브러리는 underscore.js, lodash 등이 있다.
    • 만든 메소드 중 핵심적인 것 몇가지를 짚어보자면 아래와 같은 것들이 있다.
      • .forEach
        _.each = function (collection, iteratee) {
          if (Array.isArray(collection)) {
            //배열 일 경우
            for (let i = 0; i < collection.length; i++) {
              iteratee(collection[i], i, collection);
            }
          } else if (typeof collection === "object") {
            //객체일 경우
            for (let i = 0; i < Object.keys(collection).length; i++) {
              iteratee(Object.values(collection)[i], Object.keys(collection)[i], collection);
            }
          }
        };
        ⇒ 배열일 경우, 객체일 경우를 다르게 분기시켜 적용한다.
      • .reduce
        _.reduce = function (arr, iteratee, initVal) {
          let total = 0;
          let newArr = [];
        
          if (initVal !== undefined) {
            total = initVal;
            newArr = arr;
          } else {
            total = arr[0];
            newArr = _.slice(arr, 1);
          }
          _.each(newArr, function (el, idx, newArr) {
            total = iteratee(total, el, idx, newArr);
          });
        
          return total;
        };
        ⇒ reduce는 initVal(최초값)을 지정 여부를 분기시키고 거기에 따라 total(응축값)을 지정한 뒤,계속 함수 속에 인자를 넣은 값을 쌓은 뒤 return 시켜준다.

느낀점


우리들이 편하게 쓰고 있는 메소드들은 선배 개발자들이 이미 불편함을 느끼고 오랜 시간과 노력 끝에 탄생한 결과물들이다. 이런 것들이 없었다면 아직도 수많은 코드들에 for가 덕지덕지 붙어있지 않을까? 그들의 위대한 결과물에 다시 한 번 감사하며, 나도 훗날 그런 메소드들을 만드는 데 기여하는 contributor가 되고싶다.

내일 배울 것


  • 비동기
  • 타이머 API
  • Node.js 모듈
profile
작게라도 꾸준히 성장하는게 목표입니다.
post-custom-banner

0개의 댓글