[모던JS입문] 8.9 고차 함수

Bora Im·2020년 3월 29일
0

모던JS입문

목록 보기
3/8

고차함수를 이용해 작업을 한곳에 모아 추상화를 하면 프로그램의 가독성과 유지 보수성을 향상

8.9.1 고차 함수
8.9.2 예
8.9.3 메모이제이션
8.9.4 함수의 합성
8.9.5 부분 적용
8.9.6 커링

8.9.1
고차 함수 : 함수를 인수로 받는 함수 / 함수를 반환하는 함수
처리 패턴이 같은 작업을 추상화하여 하나로 합칠 수 있다.
8.9.2

let digits = "";
for(let i=0; i<10; i++) {
	digits += i;
}
console.log(digits); // 0123456789

let randomChars = "";
for(let i=0; i<8; i++) {
	randomChars += String.fromCharCode(Math.floor(Math.random()*26)+"a".charCodeAt(0));
}
console.log(randomChars);

function joinStrings(n,f) {
  let s = "";
  for(let i=0; i<n; i++) {
    s += f(i);
  }
  return s;
}

let digits2 = joinStrings(10, function(i) {return i});
console.log(digits2);
let randomChars2 = joinStrings(8, function(i) {
  return String.fromCharCode(Math.floor(Math.random()*26)+"a".charCodeAt(0));
});
console.log(randomChars2);

8.9.3 메모이제이션
컴퓨터 프로그램이 동일한 계산을 반복해야 할 때
이전에 계산한 값을 메모리에 저장함으로써
동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술

8.9.4 함수의 합성
함수 f(x), g(x)가 있을 때 함수 f(g(x))를 f와 g의 합성 함수라고 한다.

function compose(f,g) {
    return function(x) {
        return f(g(x));
        // 인수 x를 함수 g의 매개변수로 보내 실행값 반환
        // 그 값을 다시 함수 f의 인자로 보내 실행값 반환
    };
}
var square = function(x) {return x*x;};
var add1 = function(x) {return x+1;};
var h = compose(square,add1);
console.log(h(2)); // 9

function compose_multiple(f,g) {
    return function() {
        return f.call(this,g.apply(this, arguments));
        // 여러 개의 인수를 함수 g의 매개변수로 보내 실행값 반환
        // 그 값을 다시 함수 f의 인자로 보내 실행값 반환
    };
}

8.9.5 부분 적용
인수를 여러 개 받는 함수의 몇몇 인수를 상수로 지정해 새로운 함수를 생성.

function multiply(x,y) {return x*y;};
console.log(multiply(2,3)); // 6

multiply2 = function(y) {return multiply(2,y);};
console.log(multiply2(3)); // 6

multiply3 = multiply.bind(null,2);
console.log(multiply3(3)); // 6

8.9.6 커링
인수를 2개 이상 받는 함수를 분해하여 인수가 하나인 함수의 중첩 함수로 변환.
커링된 함수를 통해 부분 적용 함수를 쉽게 만들 수 있다. (매개변수를 나타내는 함수 집합을 정의)

0개의 댓글