S2 Unit 1. Javascript 고차함수

나현·2022년 9월 20일
0

학습일지

목록 보기
18/53
post-thumbnail

💡 이번에 배운 내용

  • Section 2.
    서버와 통신이 가능한 구조적인 Web App을 만들 수 있다.
  • Unit1. Javascript 고차함수: 고차 함수를 학습하여 보다 복잡한 알고리즘을 직접 구현할 수 있다.

느낀점

이번 학습은 언뜻 많지 않아 보이지만 공부할 시간은 제일 부족했다.
filter, map, reduce를 활용해 문제를 풀어보지 않으면 이해가 어려웠기 때문이다. 특히 코딩문제를 풀 때는 reduce가 제일 골치아팠다.
고차함수라니 정말 편리하면서도 복잡한 개념이다!
학습하면서 시간이 모자라기도 하고 공부 양이 많아 살짝 위기가 올 뻔 했는데..... 🫠 포기하지 말고 차근차근 하자!


키워드

일급 객체, 고차함수, 콜백함수, map, filter, reduce


학습내용

Ch1. 고차함수

일급 객체(first-class citizen)

일급 객체는 특별한 대우를 받는 객체로 함수가 대표적이다.

일급 객체인 함수의 3가지 특징:

  • 변수에 할당이 가능하다.
  • 다른 함수의 전달인자가 될 수 있다. (콜백callback 함수)
  • 함수에서 함수를 리턴할 수 있다. (클로저)

고차 함수(higher-order function)

위의 특징처럼 전달인자를 함수로 받거나, 함수를 리턴하는 함수를 고차함수라고 한다.

Ch2. 내장 고차 함수 (매우 중요)

내장 고차 함수로는 filter, map, reduce 등이 있다.

let arr=[1,2,3,4];

let arrFilter=arr.filter(el=>el%2==0);
let arrMap=arr.map(el=>el*2);
let arrReduce=arr.reduce((acc,cur)=>acc+cur, 0);//0은 초기값

console.log(arrFilter); //[2,4]
console.log(arrMap); //[2,4,6,8]
console.log(arrReduce); //10

filter (immutable)

배열의 각 요소를 콜백함수의 조건이 true인 경우만 모아 새로운 배열을 리턴한다.
말 그대로 원하는 조건대로 필터링하여 배열을 구성할 수 있다.

map (immutable)

배열의 각 요소에 콜백함수를 적용시킨 새로운 배열을 리턴한다.
원하는 조건으로 배열을 재구성할 수 있다.

reduce (immutable)

배열의 각 요소를 콜백 함수에 따라 하나의 값으로 축소하여 값을 리턴한다.
콜백함수의 인자는 누산, 각 요소가 되며
초기값을 따로 설정하지 않으면 배열의 첫번째 요소가 초기값이 된다.
배열 요소의 총합, 배열 요소의 총 곱 등 배열의 값을 누산하는데 사용한다.
배열의 요소끼리 비교할 때도 사용할 수 있다.

Ch3. 고차 함수의 중요성

추상화(abstraction)

컴퓨터 공학에서 추상화는 쉽게 말해 복잡한 개념을 압축해 핵심만 추리는 것을 의미한다. 사용자 입장에서 어떤 정보를 입력하고 원하는 결과를 출력받을 때, 그 중간 과정에 대해서 알지 못해도 원하는 결과를 받는 경우 추상화라고 볼 수 있다.
프로그래밍시 자주 사용하는 기능을 함수로 작성하여 사용할 때 이 함수를 일종의 논리, 로직logic이라고 가정하자. 이 로직은 값을 전달인자로 받는 값(value) 수준의 추상화이다.
그리고 고차 함수는 이 로직을 전달받거나 리턴하는 로직으로, 중간의 복잡한 로직을 생략했다. 이를 로직 수준의 추상화, 사고(thought) 수준의 추상화라 볼 수 있다.
결론적으로, 추상화의 관점에서 고차함수는 값을 전달인자로 받는 값 수준의 추상화가 아니라
함수를 전달받거나 리턴하는 사고 수준의 추상화라 할 수 있다.


질문해보기

1. prototype 이란?
프로토타입은 일급 객체인 함수만이 가진 속성이다. 이 프로토타입 속성을 이용해 프로토타입 체인과 상속 등이 가능하다.
이 개념을 이해하기 위해서는 객체 지향 프로그래밍, 인스턴스, 상속 등을 학습해야 한다! 때문에 추후에 좀 더 상세히 다룰 학습할 예정이다.

profile
프론트엔드 개발자 NH입니다. 시리즈로 보시면 더 쉽게 여러 글들을 볼 수 있습니다!

0개의 댓글