클로저

javascript

클로저

클로저의 정의를 살펴보기 전에 클로저가 무엇인지 예제부터 알아보겠습니다

 function test(name) {
    var output = 'Hello' + name + '...!';   
 }
 
 alert(output);
 
 

위 코드는 오류가 있으므로 웹페이지에서 오류가 발생하거나 경고창을 출력하지 않습니다. 함수안에 있는 변수는 지역변수이므로 함수 외부에서 사용할 수 없습니다. 지역변수는 함수가 실행될때 생성되고 함수가 종료될때 사라지기 때문입니다.

하지만 클로저를 사용하면 이 규칙을 위반할 수 있습니다. 코드 5-27의 지역변수 output은 함수 test()를 호출할 때 생성됩니다.

 function test(name) {
    var output = 'Hello' + name + ' ..! ' ;
    return function() {
        alert(output);
    }
    
 }
 
 test('JavaScript')();
 

변수 output은 지역변수 이므로 함수가 종료될 때 사라져야 합니다. 그러나 해당 변수가 이후에도 활용될 가능성이 있으므로 자바스크립트는 변수를 제거하지 않고 남겨둡니다. 따라서 코드를 실행하면 경고창이 실행됩니다.

### 클로저의 정의는 다양합니다.

이렇게 지역변수를 남겨두는 현상을 클로저라고 부르기도 하고, 함수 test() 내부의 변수들이 살아있는 것이므로 test() 함수로 생성된 공간을 클로저라고 부르기도 합니다. 또한 리턴된 함수자체를 클로저라고 부르기도 하며, 살아남은 지역변수 output을 클로저라 부르기도 합니다.

정의가 워낙많아 헷갈릴 수 있지만 클로저가 어떠한 것인지 감만 잡아주세요.

추가로 지역변수 output을 남겨둔다고 해서 외부에서 마음대로 사용할 수 있는 것은 아닙니다. 반드시 리턴된 클로저함수를 사용해야 지역변수 output을 사용할 수 있습니다. 클로저함수로 인해 남은 지역변수는 클로저 함수 각각의 고유한 변수입니다.

 function test(name) {
    var output = 'Hello' + name + ' ..! ';
    return function() {
        alert(output);
    }
 }
 
 var test_1 = test('Web');
 var test_2 = test('JavaScript');
 
 test_1();
 test_2();
 

함수 test_1과 test_2를 호출하면 각각의 고유한 지역변수 output이 있다는것을 알 수 있습니다.

클로저함수를 처음접하면 어디에 사용하는지 감이 잘 잡히지 않을 수 있습니다. 클로저와 관련된 것은 직접 여러가지 프로그램을 접하면서 “이러한 경우에 사용해야한다” 라는것을 느껴야 합니다. 캡슐화부분에서 다시한번 클로저와 관련된 내용을 살펴보겠습니다.

다음엔 내장함수에 대해서 알아보겠습니다.

효준's profile image

효준

2017-12-27 15:55

다른글 보러가기

스프링 Start

이전 포스트

꿈꾸는 책다방 진행상황

다음 포스트