ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클로져 기초
    Technique/Javascript 2016. 6. 20. 18:31
    반응형

    javascript에서 함수는 전부 클로져 입니다.
    그럼 애초에 클로져는 무엇일까요

    클로져( Clouser )
    클로져는 간단히 정의 하자면 [ 자신을 포함한 스코프에 있는 변수를 참조가능한 함수 ] 라고 말할 수 있습니다.

    말로는 느낌이 확 오지 않을수 있지만, 코드를 하나씩 읽어 내려 간다면 입문으로서 클로져는 간단히 이해 가능합니다.

    스코프( Scope )
    우선 javascript는 함수별로 스코프가 만들어 집니다.
    스코프라는 것은 변수를 참조가능한 범위 입니다.
    그 범위외에는 변수는 참조가 불가능합니다.


    1
    2
    3
    4
    5
    6
    function func() {
      var value = 1;
      console.log(value);
    }
    func(); // 1
    console.log(value); // undefined
    cs


    클로져의 예
    여기서 크롤져의 예를 한번 볼까요


    1
    2
    3
    4
    5
    6
    7
    8
    9
    function func() {
      var value = 1;
     
      function innerFunc() {
        console.log(value);
      }
      innerFunc();
    }
    func(); // 1
    cs


    방금전 클로져에 대한 정의를 떠올려 봅시다
    [ 자신을 포함한 스코프에 잇는 변수를 참조 가능한 함수 ]

    안쪽의 함수가 바깥쪽의 함수의 변수를 참조 가능하게 되어 있습니다.
    여기서 중요한 것은 값을 복사하는 겂이 아니라, 참조가 가능하다는 것 입니다.

    그렇기 때문에 여기서는 아래와 같은 value의 변경이 가능합니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function func() {
      var value = 1;
     
      function innerFunc() {
        value++;
      }
      innerFunc();
      console.log(value); // 2
    }
    func();
    cs



    클로져의 실천예
    여기서 기본적인 클로져의 실천예를 하나 들어 볼까합니다.
    [ 모듈 패턴 ]을 소개합니다.

    클로져의 이점중 하나가 변수를 private적인 변수로서 취급하는 것이 가능하다는 것입니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var module = (function() {
      var count = 0;
     
      return {
        increment: function() {
          count++;
        },
        show: function() {
          console.log(count);
        }
      };
     
    })();
     
    module.show(); // 0
     
    module.increment();
    module.show(); // 1
     
    console.log(count); // undefined
    cs


    임시함수를 사용하여 오브젝트를 생성합니다.
    module에는 return 되고있는 오브젝트가 대입됩니다.

    여기서 중요한것은, 임시함수내의 count에 관해서는 내부로부터만 참조된다는것 입니다.
    외부로부터 접근 하려 하는 경우 당연히 [undefined]가 됩니다.

    이것에 의해 private한 변수로서 사용하는것이 가능하게 됩니다.

    반응형

    'Technique > Javascript' 카테고리의 다른 글

    객체, Prototype  (0) 2016.11.20
    jQuery keyPress Event에 대하여  (0) 2016.09.09
    [ jQuery ] select box actions  (0) 2016.04.06
    룬(luhn) 알고리즘 구현  (0) 2016.02.17
    [ 펌 ] jQuery 성능 최적화  (0) 2016.01.27

    댓글

Designed by Tistory.