고차함수

Dongwoo Joo·2023년 3월 14일
0

codestates bootcamp

목록 보기
16/48

학습 내용

고차함수

일급 객체

컴퓨터 프로그래밍 언어에서, 일급 객체는 값의 성질을 갖는 객체를 의미한다.
즉, 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체이다.

아래 3가지가 가능하다.
함수에 인자(argument)로 전달하기, 수정하기, 변수에 할당하기.

고차함수

주체적인 함수이다.
전달인자로 함수를 '받을 수' 있거나, 함수를 '리턴할 수' 있다. 혹은 둘 다 가능하다.
(주체적: 주체로서 외부의 객체를 자주적으로 작용하여 그것을 변형시키는 태도)

콜백함수

종속적인 함수이다.
다른 함수의 전달인자로 전달되는 함수이다.

  • 주의(필자만의 생각) -
    수학에서의 함수 개념으로 이해하면 쉽다.
    함성함수에 외부함수, 내부함수가 있다.
    y = ln(2x) 이면, 외부함수 = ln x / 내부함수 = 2x 이다.

외부함수가 내부함수를 x값으로 사용하듯,
고차함수는 콜백함수를 x값으로 사용할 수 있다.
고차함수는 외부함수의 성질을 띄고, 콜백함수는 내부함수의 성질을 띈다.

내장 고차함수

내장 고차함수

(자바스크립트) 안에 저장된 고차함수.
많이 사용하는 기능들이기 때문에, 사용자의 편의를 위해 만들지 않았나 싶다.
마치 엑셀에서 자주 사용하는 함수 같다.
(그 중 가장 많이 사용하는 filter 기능이 매우 유사하다)

Filter

filtering은 데이터를 특정 기준으로 거르고, 나머지 내용을 취합하는 것을 말한다.
따라서, filter는 데이터를 거른다고 생각할 수 있다.

filter는 새로운 배열을 리턴하고,
배열의 각 요소에 콜백 함수를 적용시켰을 때, true를 리턴하는 요소를 갖는다.

map

mapping한다는 의미는, 하나의 값을 다른 값으로 대응시키는 것을 말한다.
따라서, map은 각 요소의 값을 다른 값으로 대응시킨다고 직관적으로 생각할 수 있다.

map은 새로운 배열을 리턴하고,
배열의 각 요소에 콜백 함수를 적용시킨다.

reduce

Reduce는 축소하다 라는 의미이다.
무언가를 더 작게, 더 단순하게 만드는 의미는 단일 값으로 축소된다는 의미와 유사하다.

reduce 메서드는 요소를 반복하고 결과를 누적하여 단일 값으로 '축소'한다.
reduce는 배열의 각 요소를 콜백 함수에 적용해 축소한 단일 값을 리턴한다.

let arr = {1,2,3}
arr.reduce((arr, cur) => {
return acc + cur;
}); // 6
*acc = acumulation 누적 / cur = current 현재

고차함수는 왜 중요한가?

추상화 때문에 중요하다.
복잡한 내용을 단순화하여 핵심을 찾는 것이다.
이 콘텐츠에서는 2개의 추상화를 제시한다.

값 수준의 추상화: 단순히 값을 전달받아 처리하는 수준
사고의 추상화: 함수를 전달받아 처리하는 수준

함수를 함수의 전달인자로 받고, 리턴하는 것.
기능을 묶어, 새로운 기능을 만드는 것은 복잡한 로직이 묶여진 것이다.
이는 복잡한 로직을 간단히 고차함수로 표현할 수 있다는 의미이다.
따라서, 추상화는 코드를 더 효율적으로 작성하는데 필요하기 때문에 고차함수는 중요하다.

*최근 읽는 컨셉추얼 씽킹 책에서도, 5가지 사고축 중에 추상적 <-> 구체적 사고축을 설명한다.
컨셉추얼 씽킹을 잘하는 리더, 즉 문제의 본질을 파악하여 해결하는 리더들은 추상적 축의 끝에 도달한 후 다시 구체적 축 끝에 도달한다.
문제의 본질을 파악하고, 개념화 및 추상화하여 해결방안을 만들고 구체적 실행에 도달한다는 내용이다.

아는 것

  • 일급 객체의 의미
  • 고차함수의 의미
  • 내장 고차함수의 의미
  • 고차함수 3가지(filter, map, reduce)

모르는 것

  • 고차함수의 활용
  • "함수를 리턴한다"는 의미를 코드로 작성 및 설명. return function() 이처럼 return 이라는 토큰 뒤에 바로 function이 오는 것이 함수를 리턴하는 것인가?
  • 종합퀴즈 10번

인자 2개. adder(5)(3) 이건 어떻게 해석하나?
예시.
function adder(added) { // adder -> 고차함수
return function (num) { // num -> 콜백 함수인 익명함수 function의 인자
return num + added;
};
}
let output = adder(5)(3); // 8

여기에서 adder(5) 뒤에 붙은 (3)은 무엇이고, 어떤 역할을 하는가?
(3)은 고차함수의 내부함수의 인자로 사용된다.
아직 명확한 명칭을 모른다. 하지만, adder(5)의 인자로 사용된다고 생각하자.

profile
pursue nature

0개의 댓글