TIL 22일차 - 고차함수

박진현·2021년 7월 7일
0

TIL

목록 보기
22/71

Achievement Goals

  • 일급 객체(first-class citizen)의 세 가지 특징을 설명할 수 있다.

    1. 변수에 할당할 수 있다.
    2. 다른 인자로 전달될 수 있다.
    3. 다른 함수의 리턴값이 될 수 있다.
  • 고차 함수(higher-order function)에 대해 설명할 수 있다.

    함수를 인자로 받고, 함수의 형태로 리턴하는 함수.
    추상화를 통해 복잡한 개념을 단축시켜 생산성을 향상시킴.
    (화살표 함수를 쓰는 게 더 직관적이고 단축되어서 좋은 것 같다.)
    그리고 추상화를 통해 더 고차원 적인 수준에서 생각할 수 있다.
    (생각이 확장되는 계기가 된 것 같다.)

  • 고차 함수를 자바스크립트로 작성할 수 있다.

    O

  • 배열 내장 고차함수 filter에 대해서 이해할 수 있다.

    arr.filter( 필터 할 함수 ) 으로 사용한다.
    필터 할 함수는 boolean 값을 받아야만 하고 true이면 유지 , false이면 필터링 하여 요소를 arr에 반환하지 않는다.
    예를 들어 arr = [1,2,3,4,5] 이고 짝수만 걸러내고 싶다면,
    function isEven(num){
    if(num % 2 === 0){
    return true
    }
    } 인 함수를 필터에 넣으면 된다.
    arr.filter(isEven) // arr = [2,4]

  • forEach, find, filter, map, reduce, sort, some, every

    arr = [ 1,2,3,4,5 ]
    arr.forEach(el => console.log(el)) // console.log(1) ,console.log(2) ....console.log(5)
    arr.find(el => el > 3) // 4 (조건에 만족하는 첫번째 값만 리턴, 조건에 맞는 값이 없을 경우 undefined 리턴 )
    arr.filter(isEven) // [2,4]
    arr.map(el => el*2) // [2,4,6,8,10] 각 el에 함수를 호출한 결과를 모아 반환한다.
    arr.reduce((a,b) => a+b) // 15 이고 초기값을 ''으로 줄 경우
    arr.reduce((a,b)=>a+b,'') // '12345' 가 된다.
    이중배열 ,삼중배열 등을 전부 펼칠 수 도 있다. (reduce와 concat활용,또는 flat사용) map으로 만들수도 있다.. 거의 만능의 메서드
    arr.sort() // arr = [b,c,e,f,d] 일땐 [b,c,d,e,f]로 , arr = [1,3,10,2,19,23]일땐 [1,10,19,2,23,3] 으로 나온다. stable sort가 아니라 유니코드를 따른다.
    arr.some(el => el%2===0) // true , 주어진 el중 어떤 것이라도 조건을 통과하면 true를 반환, 모두 조건을 통과하지 못한다면 false를 반환(빈 배열도 false)
    arr.every(el => el%2===0) // false, 주어진 모든 el이 조건을 통과하면 true, 주어진 el중 하나라도 조건을 통과하지 못한다면 false

  • 추상화(abstraction)에 대해 설명할 수 있다.

    복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
    추상화 = 생산성(productivity)의 향상
    추상화의 관점에서 함수를 바라보면, 함수는 사고(thought) 또는 논리(logic)의 묶음
    함수를 통해 얻은 추상화를, 한 단계 더 높인 것이 고차 함수

  • 추상화의 관점에서 고차 함수가 갖는 이점에 대해 설명할 수 있다.

    고차 함수는 이 추상화의 수준을 사고의 추상화 수준으로 끌어올린다.
    값 수준의 추상화: 단순히 값(value)을 전달받아 처리하는 수준
    사고의 추상화: 함수(사고의 묶음)를 전달받아 처리하는 수준
    다시 말해 고차 함수를 통해, 보다 높은 수준(higher order)에서 생각할 수 있다.
    고차함수 = 함수를 전달받거나 함수를 리턴한다 = 사고(함수)에 대한 복잡한 로직은 감추어져 있다 = 사고 수준에서의 추상화
    추상화의 수준이 높아지는 만큼, 생산성도 비약적으로 상승

  • 고차 함수를 활용하여 코드를 작성할 수 있다.

    O

주말에 할 것
MapReduce 학습하기 (MapReduce Model)
자바스크립트에서 커링(currying)과 클로저(closure)의 차이 이해하기 (js closure vs curry)
선언형 프로그래밍(declarative programming)과 절차형 프로그래밍(imperative programming)의 차이를 배열 메소드를 통해 이해하기 (js imperative vs declarative)
함수의 조합(function composition)에 대해 학습하기 (javascript function composition)

profile
👨🏻‍💻 호기심이 많고 에러를 좋아하는 프론트엔드 개발자 박진현 입니다.

0개의 댓글