js 클로저 함수
클로저
- 클로저Closure는 자바의 함수 구현 방식 중 하나로 프로퍼티의 은닉화를 보장하는 코딩 방식이다.
- 클로저란 명칭은 메모리와 관련이 있다고 한다. 외부함수의 메모리가 내부 메모리를 참조한 변수가 사라지기 전까지 없어지지 않는다는 의미에서 유래되었다고 한다. 그러니까 내부 함수의 생명주기가 외부 함수의 종료(close)를 좌우한다는 의미이다.
- 결론적으로 자바스크립트는 클로저를 통해 외부함수의 데이타를 은닉화하며, 원하는 기능을 구현할 수 있다.
간단한 클로저
- 클로저는 함수의 리턴값을 함수로 가진다.
- 외부 함수에는 프로퍼티가 정의되어 있다. 내부 함수를 리턴받은 변수는 절대로 외부 함수의 프로퍼티에 직접 접근할 수 없다.
function counter(){
let num = 0;
return function(){
return num++;
};
};
let cnt = counter();
cnt();
클로저의 다중함수 구현
- 클로저를 좀 더 확대하면 자바의 getter setter 등 다양한 매서드를 구현 가능하다.
- 자바에서 클래스를 상속받은 객체가 서로 다르듯 같은 내부함수를 리턴받은 참조변수는 서로 다른 메모리를 바라보고 있다.
function counterV2(){
let num = 0;
return {
adder : function(){
num ++;
return num;
},
get : function(){
return num;
},
}
};
let cnt1 = counterV2();
cnt1.adder();
cnt1.get();
let cnt2 = counterV2(); // cnt1 과 cnt2는 다르다.