Programming Storytelling

클로저(closure)란 무엇일까? 본문

Javascript

클로저(closure)란 무엇일까?

HJdone 2019. 6. 5. 17:22

클로저(closure)는 내부함수가 외부함수의 맥락에 접근할 수 있는 것을 가르킨다.쉽게 말해 함수 안에 함수를 또 선언 하는것이다. 우리가 대표적으로 알고 있는 함수표현식은 클로저나 콜백함수로 사용하기 쉽다는 장점이 있다. 

이번 포스팅에서 그러한 사실에 대해서 함께 알아 보도록 하자.

 

 

function outter() {
	function inner() {
    var title = 'programming good';
    alert(title);
    }
    inner();
    }

이런식으로 함수안에 함수를 선언하면 그안에서만 특정함수를 사용 할 수 있다는 장점이 있다.즉, 내부함수가 외부함수에 접근을 할 수 있다는 뜻이다.그리고 클로저는 내부함수가 죵료된 뒤에도 외부함수를 통해 함수를 호출 할 수 있다는 큰 장점이 있다.

 

이제 클로저를 이용한 정확한 예제에 대해 살펴보도록 하자.

function movie(title) {
	return {
		get_title : function () {
			return title;
            }
            set_title : function(_title){
            	title = _title
            }
     }
}
ghost =movie('Ghost in the shell');
matrix = movie('Matrix');
alert(ghost.get_title());
alert(matrix.get_title());
ghost.set_title('코딩코딩')

위 코드는 함수내부에서 객체를 반환하고 있는 대표적인 예시인 동시에 영화 이름을 여러방식으로 바꿔주는걸 보여주는 코드이다. 

실행결과는  title값이 Ghost in the shell->Matrix->코딩코딩 순서대로 바뀔 것이다.

이 코드를 통해 동일한 외부안에서 만들어진 내부함수나 메소드는 외부함수의 지역변수를 통해 공유한다는 사실도 알 수 있을 것이다.그리고 클로저의 중요한 특징 중에 외부함수가 실행 될 때마다 새로운 지역변수를 포함하는 클로저를 생성시킨다는 사실도 기억하도록 하자.