TIL#6

Yea Myeong Kim·2021년 11월 30일
0

2021/11/30

일급 객체, 고차 함수

일급 객체
1. 변수에 할당 가능
2. 다른 함수의 인자로 전달 가능
3. 다른 함수의 결과로서 리턴이 가능

함수를 데이터(string, number, boolean, array, object)를 다루듯이 다룰 수 있다는 걸 의미합니다

고차 함수
함수를 인자로 받을 수 있으며, 함수의 형태로 리턴할 수 있는 함수.

  • 함수가 일급객체이기 때문에 고차함수로 활용이 가능하다.
  • 콜백함수 : 함수에 인자로 전달되는 함수
    - 콜백 함수를 전달받은 고차 함수는, 함수 내부에서 이 콜백 함수를 호출(invoke) 할 수 있습니다. 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있으며, 아예 호출하지 않을 수도 있고, 여러 번 실행할 수도 있습니다.
  • 커리함수 : 함수를 리턴하는 함수
  • 메소드 : 객체 안에 들어있는 함수

내장 고차함수

배열의 내장 메소드들

자주 쓰는 메소드들 : map , filter , reduce

  • 왜 써야 하는가 ? → 추상화를 통한 효율성 증대
  • map : 배열의 각 요소에 콜백함수를 적용시킨 새로운 배열을 리턴 / 콜백함수에 두번째 인자를 주면 인덱스를 가져옴
  • filter : 배열의 각 요소에 콜백함수를 적용시켰을 때, true 를 리턴하는 요소들만 모은 새로운 배열을 리턴
  • reduce : 배열의 각 요소를 콜백함수에 맞게 하나로 응축시킨 값을 리턴 / 초기값을 설정하지 않으면 배열의 첫 요소가 acc, cur은 두 번째 요소부터 시작
    - acc(accumulation) : 응축된 값
    - cur(current) : 현재 배열 요소
  • 기타 메소드 : forEach, find, sort, some, every 등등

예시 코드 (filter 메소드)

let arr = [1, 2, 3, 4];
let output = arr.filter(짝수만 고르고 싶어요);
console.log(output); // ->> [2, 4]

여기서 걸러내는 기준이 되는 특정 조건(짝수만 고르고 싶어요)은 filter 메소드의 인자로 전달됨. 이때 전달되는 조건은 함수의 형태이다. -> filter 메소드는, 걸러내기 위한 조건을 명시한 함수를 인자로 받기 때문에 고차함수이다.

Array.prototype.filter = function(func) {
    const arr = this;
    const newArr = []
    for(let i = 0; i < arr.length; i++) { // 배열의 요소들 루프
      if (func(arr[i]) === true) { // 그 요소가 조건에 만족해서 true라면
        newArr.push(this[i]) // 그 요소를 push 
      }
    }
    return newArr; // true인 요소들만 push했던 새로운 배열을 반환
  }

위 코드를 바탕으로 다시 구현해보면

let output = arr.filter(function (el){
  return num % 2 === 0; // 짝수라면 true이므로 해당하는 요소들로만 이루어진 새로운 배열을 반환해줌.
})

추상화

복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
-> 생산성(productivity)의 향상

브라우저 창에 주소를 입력했을 때, 어떤 일이 일어나는지 정확하게 알고 있나요?
입력한 내용을 전파하고, 어디 서버로 갔다가 다른 서버로 가는 등 그런 복잡한 내용을, 일상생활에서는 몰라도 됩니다. 우리는 그저 주소창에 올바른 주소를 입력하면, 브라우저가 해당 사이트를 보여 준다는 것만 알고 있습니다.
자동차의 시동 버튼, 자료를 정리하는 엑셀, 지하철/버스를 타기 위한 교통 카드도 추상화의 결과입니다.

  • ex) 프로그램을 작성할 때, 자주 반복해서 사용하는 로직은 별도의 함수로 작성
  • 추상화의 관점에서 함수를 바라보면, 함수는 사고(thought) 또는 논리(logic)의 묶음입니다.
  • 함수를 통해 얻은 추상화를, 한 단계 더 높인 것 -> 고차 함수

함수 = 값을 전달받아 값을 리턴한다 = 값에 대한 복잡한 로직은 감추어져 있다 = 값 수준에서의 추상화

0개의 댓글

관련 채용 정보