Thief of Wealth
Published 2021. 1. 22. 22:51
[Javascript] 클로저 개발/Javascript

클로저는 어떤 함수의 내부함수와 밀접한 관계를 가지고 있는 주제이다.

내부함수는 외부함수의 지역변수에 접근 할 수 있는데, 외부함수의 실행이 끝나서 소멸된 이후에도 내부함수가 외부함수의 변수에 접근할 수 있다.

이러한 매커니즘을 클로저라고 한다.

 

에를 들어보자

function outer(){
	const title = "Hi";
    return function(0{
    	console.log(title);
    }
}

const test = outer();
test();

위 결과는 어떻게 될까?

예상대로 Hi가 출력될 것이다.

 

outer를 호출하여 그 결과인 익명의 함수가 test에 담기는데

outer 함수가 종료되었음에도 불구하고 익명의 함수에서 Hi를 출력하는 것으로 보아, 

외부함수의 지역변수를 사용하는 내부함수가 소멸될때까지 해당 지역변수가 소멸되지 않는 것을 알 수 있다.

 

다음 예제도 마찬가지이다.

function test(title){
	return {
    	getter:function(){return title},
        setter:function(title2){title = title2}
    }
}

const temp = test('java');
console.log(temp.getter());
temp.setter('C++');
console.log(temp.getter());

위 결과는 

java

C++

으로 나온다.

 

즉, 클로저란 

외부 변수를 기역하고 이 외부 변수에 접근할 수 있는 함수를 의미한다.

자바스크립트의 함수는 자신이 어디서 만들어졌는지를 기억한다는 뜻이다.

 

장점

- 전역 변수의 오렴을 막고, 변수/값을 은닉하여 사용할 수 있다.

 

단점

- 클로저는 메모리를 소모한다.

- 스코프 생성과 이후 변수 조회에 따른 퍼포먼스 손해가 있다.

 

 

참고 : opentutorials.org/course/743/6544

profile on loading

Loading...