[JavaScript] 고차 함수 ✨

KIM DA MI·2023년 3월 14일
0

JavaScript

목록 보기
11/16
post-thumbnail

1. 일급 객체


일급 객체의 특징

  • 변수에 할당(assignment)할 수 있다.

    // 변수 square에 함수를 할당
    const square = function (num) {
        return num * num;
    }
    
    // 변수 square에는 함수가 할당되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있다.
    console.log(square(5)); // 25
  • 다른 함수의 전달인자(argument)로 전달될 수 있다.

  • 다른 함수의 결과로서 리턴(return)될 수 있다.

  • 함수가 일급객체라서 고차함수로 활용 가능하다.


2. 고차 함수


고차 함수의 특징

  • 함수를 전달인자(argument)로 받을 수 있다.

    // func처럼 함수에 인자로 전달되는 함수를 콜백함수 라고 한다.
    function functionParameter(func, num) {
        return func(num);
    }
    
    function square(num) {
        return num * num;
    }
    
    console.log(functionParameter(square, 6));
    • 콜백함수 : 다른 함수(caller)의 전달인자(argument)로 전달되는 함수

  • 함수를 리턴(return)할 수 있는 함수이다.

    // 함수를 리턴하는 함수를 커링함수라고 한다.
    let add = function(num1) {
        return function(num2) {
            return num1 + num2
        }
    }
    
    let add3 = add(3)
    
    console.log(add3);
    • 커링함수 : 함수를 리턴하는 함수



3. 내장 고차 함수


배열 내장 메서드

  • 메서드 : 객체에 들어있는 함수를 말한다.
  • Dot Notation(.)과 Bracket Notation([])으로 객체에 접근할 수 있다.
  • 배열 내장 메서드는 많이 사용되기 때문에 꼭 알아두어야 한다!

map

  • 배열의 각 요소에 콜백 함수를 적용시킨 요소를 가진 새로운 배열을 리턴

filter

  • 배열의 각 요소에 콜백 함수를 적용시켰을 때, true를 리턴하는 요소들만 모은 새로운 배열을 리턴

reduce

  • 배열의 각 요소를 콜백 함수에 맞게 하나로 응축시킨 값을 리턴
  • 초기값을 설정하지 않으면 배열의 첫 번째 요소가 acc, cur는 두 번째 요소부터 시작한다.
    • acc : 응축된 값 (accumulation)
    • cur : 현재 (current) 배열 요소
  • 초기값을 설정하지 않은 경우
  • 초기값을 설정한 경우

기타 배열 내장 메서드

배열 내장 메서드설명
find콜백함수의 반환 값이 true인 첫 번째 요소 반환
findIndex콜백함수의 반환 값이 true인 첫 번째 요소의 인덱스 반환
some콜백함수의 반환 값이 단 한 번이라도 참이면 true, 모두 거짓이면 false
every콜백함수의 반환 값이 모두 참이면 true, 하나라도 거짓이면 false
sort요소들을 정렬(유니코드 순서대로)



3. 고차 함수의 중요성


  • 추상화 : 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것을 말한다.

  • 고차 함수는 이 추상화의 수준을 사고의 추상화 수준으로 끌어올려준다.

    • 값 수준의 추상화: 단순히 값(value)을 전달받아 처리하는 수준
    • 사고의 추상화: 함수(사고의 묶음)를 전달받아 처리하는 수준
  • 즉, 추상화의 수준이 높아지면 생산성도 비약적으로 상승할 수 있기 때문에 중요하다.



마치며..

강의 자료로만 보았을 때는 크게 어려움이 없어보였는데
막상 코플릿으로 문제들을 풀어보니 한 문제를 푸는 데도 시간이 굉장히 오래걸렸다.
오늘 배운 내용, 특히 배열 내장 메서드(map, filter, reduce)는 앞으로 자주 사용하게 될 중요한 부분이므로 꼭꼭 잊지말고 많이 연습해서 손에도 익히도록 해야겠다. ✨

0개의 댓글