'closure'에 해당되는 글 1건

  1. 2021.02.03 Closure 과 Currying

Closure 과 Currying

웹 개발/Study 2021. 2. 3. 14:16

Closure은 함수(A) 내에 함수(B)를 선언하여 A함수의 지역변수등을 활용함으로써 클래스처럼 활용을 할 수있게 해준다.

var makeCounter = function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }
};

var counter1 = makeCounter();
var counter2 = makeCounter();

counter1.value(); // returns 0
counter1.increment(); // adds 1
counter1.increment(); // adds 1
counter1.value(); // returns 2
counter1.decrement(); //subtracts 1
counter1.value(); // returns 1
counter2.value(); // returns 0

위의 코드처럼 변수 counter1과 counter2는 서로에게 독립적인 참조와 변수를 갖는다.

Currying은 일종의 함수 패턴으로 함수가 즉시 다른 함수를 리턴 하는것이다. 기존에 특정 값(String이나 Number)을 리턴하는게 아닌 함수 그자체를 리턴하여 할당되는 변수가 함수처럼 작동하도록 하는것이다.

let greeting = function (a) {
    return function (b) {
        return a + ' ' + b
    }
}

let hello = greeting('Hello')
let morning = greeting('Good morning')

hello('Austin') // returns Hello Austin
hello('Roy') // returns Hello Roy
morning('Austin') // returns Good morning Austin
morning('Roy') //returns Good Morning Roy

Currying은 함수형 프로그래밍의 일부로 간주되며 화살표 함수를 사용하여 보다 깔끔한 코딩이 가능하다.

let greeting = (a) => (b) => a + ' ' + b

greeting('Hello There')('General Kenobi')
//returns Hello There General Kenobi

 

'웹 개발 > Study' 카테고리의 다른 글

명령형(imperative ), 선언형(declarative), 절차형, 객체 지향형(OOP), 함수형 프로그래밍  (0) 2021.02.03
MapReduce  (0) 2021.02.03
block, inline-block, inline  (0) 2021.01.21
class 와 id의 차이점  (0) 2021.01.21
for문  (0) 2021.01.20
: