모듈패턴 Ⅱ


이전 포스트에서 설명드렸던 모듈패턴에 대해 이번 포스트에서는 좀더 다향한 패턴으로 작성해 보도록 하겠습니다.


  1. // 객체 리터널을 사용하여 작성하는 패턴입니다.
  2. var constructor_fn = (function(doc, win){
  3.     // 객체 리터널 형식을 사용하는 작성법
  4.    
  5.     var x = 0
  6.       , y = 0;
  7.  
  8.     return {
  9.         getX: function(){
  10.             return x;
  11.         },
  12.         getXfn: function(){
  13.             return this.getX;
  14.         }
  15.     };
  16.  
  17. })(document, window);
  18.  
  19. // 외부에 노출된 getX 메소드를 변경시키면 메소드 원본이 변경되었으므로 더이상 사용할수 없게 되었습니다.
  20. constructor_fn.getX = null;
  21. alert(constructor_fn.getXfn()); // null
  22.  
  23.  
  24.  
  25.  
  26. // 이번 패턴은 따로 비공개 메서드를 두어 공개할 메서드만 골라서 노출시키는 패턴입니다.
  27. var constructor_fn = (function(doc, win){
  28.     // 객체 리터널 형식을 사용하는 작성법
  29.    
  30.     var x = 0
  31.       , y = 0;
  32.    
  33.     // 비공개 메서드 
  34.     function getX(){   
  35.         return x;
  36.     };
  37.  
  38.     function getY(){
  39.         return y;
  40.     };
  41.  
  42.     function setX(x){
  43.         x = x;
  44.     };
  45.  
  46.     function setY(y){
  47.         y = y;
  48.     };
  49.  
  50.  
  51.     return {
  52.         getX: getX,
  53.         getX1: getX,
  54.         getY: getY
  55.     };
  56.  
  57. })(document, window);
  58.  
  59.  
  60. constructor_fn.getX = null;
  61. // 이전처럼 외부에 노출된 getX 메서드를 변경 하여도 메서드 원본이 비공개 함수로 정의되어 있으므로
  62. // getX 메소드는 공개된 메서드인 getX1를 호출하여도 잘 돌아가게 되는 것입니다.
  63. alert(constructor_fn.getX); // null
  64. alert(constructor_fn.getX1); // function(){ ; }