[JavaScript] 클로저(Closure)와 커링(Currying) 간단하게 정리

유진·2021년 2월 7일
3
post-thumbnail

1. 클로저(Closure)

클로저는 외부 함수의 변수에 접근할 수 있는 내부 함수, 또는 이러한 작동 원리를 일컫는 용어이다.

다음의 예제를 보자.

function outerFunc() {
  let outerVal = 2;
  function innerFunc() {
    let innerVal = 1;
    return globalVal + outerVal + innnerVal;
  }
  return innerVal;
}
let globalVal = 3;
let innerF = outerFunc();
innerF();

innerFunc()가 바로 클로저 함수이다. 클로저 함수에서는 지역변수(innerVal), 외부 함수의 변수(outerVal), 전역 변수(globalVal)에 모두 접근할 수 있다.

2. 커링(Currying)

함수에 n개의 인자를 받는 대신, n개의 클로저 함수를 만들어 각각 인자를 받게 하는 방법이다.

다음의 함수를 보자

function multiply(x, y, z){
  return x, y, z;
}

console.log(multiply(3, 5, 7));  // 3*5*7
console.log(multiply(3, 5, 8));  // 3*5*8
console.log(multiply(3, 2, 1));  // 3*2*1

multiply()의 첫번째 인자는 모두 3이며, 3*5*73*5*8은 두번째 인자가 5이다. 그러나 이 함수에서는 그때그때 모든 인자를 직접 지정해주어야 한다.

이럴 때 커링을 이용해 특정 인자를 재사용할 수 있게 만들 수 있다.

function multiply(x) {
  return function(y) {
    return function(z){
      return x*y*z;
    }
  }
}

let multiply3 = multiply(3);   // 3이 고정됨
let multiply3And5 = multiply3(5);  // 3과 5가 고정됨
let multiply3And2 = multiply3(2);  // 3과 2가 고정됨
console.log(multiply3And5(7));
console.log(multiply3And5(8));
console.log(multiply3And2(1));

클로저 함수의 외부 함수 변수의 값을 고정시킨 함수를 리턴한다.

3. 결론

커링은 클로저와 완전히 별개인 무언가가 아니라, 클로저의 특징을 이용한 기법으로 볼 수 있다. 특히, 클로저의 외부 함수 변수의 값을 고정할 수 있다는 점에서 유용하다.

참고자료

profile
제가 또 기가막힌 한 줌의 트러플 소금 같은 존재그등요

0개의 댓글