코드스테이츠

21일차~(고차함수)

lap_mu 2022. 11. 17. 21:54

오늘은 새로운 세션의 시작과 함께 수업이 바쁘게 돌아갔다. 전보다 시간이 빡빡하게 돌아갔다. 문제푸는시간도 촉박했고 이론을 읽어보는 시간도 부족했다. 점심시간도 좀 쪼개서 문제도 풀고 이론도 봤더니 얼추 시간이 맞게 끝났다. 페어활동으로 코풀릿 문제 풀기가 있었는데 딱 실시간 세션 전에 다 풀수 있어서 다행이었다. 실시간 세션에서는 이론들을 한번에 정리해주셨고 어려워하는 문제들 위주로 해설을 해주셨다. 스터디원들도 어제 회고 이후로 조금더 편해진 것 같다. 오늘 하루도 굉장히 빨랐던것 같다. 내일도 시간 좀 빡세던데.... 내일만 하면 주말이니 내일도 화이팅 하고 이번 주말은 조금 편히 지내야할 것 같다. 물론 복습 몇 시간은 무조건이지!

 

1. 일급 객체(first-class citizen)

  • 변수의 값으로 사용이 가능하다. (변수에 할당이 가능하다.)
  • 함수의 전달인자로 전달이 가능하다. 
  • 다른 함수의 리턴 값이 될 수 있다.(다른 함수의 결과로서 리턴 가능) 

=> 원시자료 데이터처럼 사용이 가능하다.

  • 함수 또한 일급 객체이다!

 

2. 고차함수(higher order function)

  • 함수를 전달인자로 전달하는 함수 = 콜백함수(callback function)라고 한다.
  • 함수를 리턴하는 함수 = 커링함수 라고도 한다.
// 함수를 전달인자로 전달받은 함수 (callback function를 전달인자로 전달받은 함수)
function a(func, num) {
	return func(num);
}

// 함수를 반환하는 함수
function a(num1) {
	return function b(num2) {
    		return num1 + num2;
    }
}

 

 

3. 내장되어 있는 고차함수

1) filter

  • 배열의 요소 중 특정 조건에 만족하는 요소만을 반환한다. (조건에 true일 경우에만)
  • 원하는 요소를 골라낼때 쓰인다.
  • 반환된 배열의 길이는 원래 배열의 길이보다 같거나 짧다.
let arr = [1, 2, 3, 4, 5];

arr.filter(function(el) {
	return el % 2 === 1; // 홀수일 경우에만 true
}
// 조건에 true인 홀수값 [1, 3, 5]를 가진 새로운 배열을 만듦.

 

2) map

  • 배열의 모든 요소가 함수의 영향을 받아 변형된 형태로 반환.
  • 모든 요소에 함수를 적용시킬때 쓰인다.
  • 반환된 배열의 길이는 원래의 배열의 길이와 같다.
let arr = [1, 2, 3, 4, 5];

arr.map(function(el) {
	return el * 2;
}

// 모든 배열의 값에 곱하기 2를 해준 새로운 배열이 반환된다.
// [2, 4, 6, 8, 10]

 

3) reduce

  • 배열의 모든 요소가 함수의 영향을 받는데 함수가 반복될 때 반환 값이 acc에 할당되며 최종 반환 값이 반환된다.
  • 모든 요소를 어떤 조건에 의해 응축시킬 때 쓰인다.
  • 초기값을 설정해줄 수 있다.
  • 반환된 배열의 길이는 원래의 배열의 길이보다 작거나 같다.
let arr = [1, 2, 3, 4, 5]

arr.reduce(function(acc, cur) {
	return acc + cur;
}, 0)

// 모든 요소의 합이 반환된다.
// 0이 초기값
// 15

// 초기값이 10일 경우
let arr = [1, 2, 3, 4, 5]

arr.reduce(function(acc, cur) {
	return acc + cur;
}, 10)

// 초기값과 모든 요소의 합이 반환된다.
// 10이 초기값
// 25