본문 바로가기

WEB의 속삭임/Client단의 외침

[JavaScript][클로저]JavaScript의 Closure

요즘 한번쯤은 다 들어 봤을것이다. 병렬처리가 화두가 되면서 떠올랐는지 모르겠지만, 내주변에 클로저로 되게 유명한 분도 계시더라..아무튼 자바스크립트에서 클로저를 어떻게 사용하는지 한번 봐보겠다~


* 클로저란? 한마디로 말하면은 로컬 변수를 참조하고 있는 함수 내의 함수 또는 일종의 기억 영역을 제공하는 구조 라고 말할수도 있겠다.


그럼 소스를 통해 봐보겠다.

function closure(init){

var counter = init;

return function(){

return ++counter;

}

}


var myClosure1 = closure(1);

var myClosure2 = closure(100);

document.writeln(myClosure1()); //2

document.writeln(myClosure2()); //101

document.writeln(myClosure1()); //3

document.writeln(myClosure2()); //102


* 리터 값으로 함수를 주는함수를 고계함수라고 한다. 고계함수 뿐만 아니라 지금 보이는 것은 함수를 호출할때마다 독립적인 값을 계속 유지 하는 것을 볼수 있다. 마치 우리가 객체를 인스턴스화 하여 호출 하는 것을 보는 듯 하다. 그래서 누구는 클로저를 간단한 객체라고 부르기도 한다. 하지만 객체와 다른점은 클로저는 하나의 기능만 가질수 있다. 즉 객체처럼 여러개의 메소드를 호출 할수는 없다. 또한 객체 지향에서는 클로저도 객체로 만들어야 된다는 룰이 있기도 한데, 그것은 선택이라 할수 있겠다.