고차함수

임동규·2022년 1월 18일
1
post-thumbnail

고차함수란 무엇인가?

고차함수의 정의

고차함수란 함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다.
예를 들어보자.

function highOrder(func,num){
	return func(num)
    }

function tenSum(x){
return 10 + x
}

highOrder 함수는 func와 num이라는 매개변수를 전달받고 return 으로 func(num) 을 전달하는 로직을 가지고 있다.
이 함수의 결과를 생각해보자.

 const result= highOrder(tenSum,10)
 console.log(result)

뭐가 나올까? 당연히 20이 나올것이다. 나는 고차함수를 처음배울때 뭐 이렇게 귀찮게 쓰지?그냥 함수에다가 로직 작성하면 되지 않나?라고 생각했었다.

그냥 tenSum(10) 을 하면 같은 결과가 나오잖아.

맞다. 사실 위의 함수는 저렇게 쓰면 된다. 그렇지만 우리는 이 개념을 JS에서 정말 유용하게 쓸 수 있다.

왜 필요한가?

우리는 추상화에 대해 생각해볼 필요가 있다. 추상화란 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것이다.
우리가 프로그램을 작성할때 반복되는 로직을 함수로 만드는 것 역시 추상화 이다. 이런 추상화는 생산성을 높여주게 된다. 만약 함수가 없더라면? 계속 같은 로직을 반복반복해서 코드의 길이는 계속 늘어만 갈 것이다.
고차함수는 프로그램에 이러한 추상화를 불어넣어준다.

어떻게 쓰는가?

**예시**
function square(num) {
  return num * num;
}

function add5(num) {
  return num + 5;
}

고차함수 compose
function compose(func1, func2) {
 			//compose 함수는 func1과 func2를 인자로 받는다.
  return function (num){
 			//리턴으로 function(num) 

    return func1(func2(num))
  }
}

let output = compose(add5, square) 
result = output(4) 
console.log(result) //result의 값은?

먼저 compose함수는 func1과 func2를 인자로 받는다.

그리고는 function(num){}함수를 리턴해버린다.

그리고 또 function(num)함수는 return 값으로 func1(func2(num))을 리턴한다.

output 을 보자. output은 뭘까? function(num)함수를 리턴받은 값을 가지고 있을 것이다.

그리고 ouput(4)를 하게 된다면 function(4){return func1(func2(4))} 이 되는 것이다.

func1은 add5였다. func2는 squre함수였다.

먼저 squre 함수에 4가 들어가게 되고 리턴 값은 16이 된다. 그리고 func1인 add5(16)이 되고 리턴은 21을 내뱉을 것이다.

사실 이러한 고차함수는 추상화에도 도움을 주지만 자바스크립트가 고차함수를 가장 많이 활용하는 것은 콜백함수를 주는 것이라고 생각한다. 고차함수라는 개념이 없었으면 우리는 콜백을 사용하지 못했을 것이다.

콜백함수를 활용하려면 고차함수의 개념에 대해서 이해해야 할 것이다. 콜백함수는 자바스크립트에서는 땔래야 땔수가 없는 개념이니깐 말이다...

profile
I will be Blockchain Core Developer

0개의 댓글