내용으로 건너뛰기
Module Pattern in JavaScript

Module Pattern in JavaScript

이 기사에서는 ES5에서 모듈 패턴을 만드는 방법을 배웁니다.

4min read

JavaScript에서는 모듈 패턴을 사용하여 코드 캡슐화를 수행할 수 있습니다. 또한 개인 및 공용 자산을 만드는 데 사용됩니다. 모듈 패턴을 구현할 수 있는 다양한 방법이 있습니다. 이 기사에서는 ES5에서 모듈 패턴을 만드는 방법을 배웁니다.  모듈 패턴의 구현을 살펴보기 전에 다음과 같은 몇 가지 이점이 있습니다.

  • 범위 지정 고정
  • Code encapsulation
  • 개인 또는 공개 범위 만들기
  • Creating a namespace
  • 공개 및 비공개 캡슐화 만들기

JavaScript Object Literals 및 Immediately- Invoked function 표현식을 사용하여 모듈 패턴을 구현할 수 있습니다. 기억을 새로 고치기 위해 객체 리터럴은 아래 목록과 같습니다.

var Product = {
 
    price: 600,
    setOrder: function () {
        return this.price;
    }
}
 
console.log(Product.setOrder());

개체를 만든 후에 속성을 추가할 수 있습니다. 또한 Immediately- Invoked 함수 표현식은 아래 예제와 같습니다.

var add = function (num1, num2) {
    let res = num1 + num2;
    console.log(res);
}(7, 2);

이 두 가지를 조합하여 JavaScript에서 모듈 패턴을 구현할 수 있습니다. 모듈을 만드는 것부터 시작하겠습니다.

(function () {
    'use strict';
    // Your code here
    // All function and variables are scoped to this function
    var price = 99;
 
}());
 
console.log(price); // undefined 

자체 포함 된 모듈 또는 익명 클로저입니다. 함수의 범위를 만들고 모든 것이 해당 함수 자체에 래핑됩니다. 따라서 함수 외부에서 price 에 액세스하려고 시도했을 때 정의되지 않았습니다. 이 익명 모듈은 전역 범위에 있다는 점을 명심하십시오.

expression을 사용하여 변수에 할당한 다음 return 문을 사용하여 private 및 public 캡슐화를 생성하여 모듈을 내보낼 수 있습니다. 아래 코드를 고려하십시오.

var module1 = (function () {
    'use strict';
 
    //private 
    let color = 'red';
 
    // public 
    return {
        price: 800
    }
}());
 
console.log(module1.price); // 800 
console.log(module1.color); // undefiend 

우리는 위의 코드 스 니펫에서 다음과 같이하고 있습니다.

  1. Creating an IIFE.
  2. IIFE 함수를 변수에 할당하기
  3. private 및 public 캡슐화를 만들기 위해 익명 개체 리터럴을 반환합니다.

반환된 객체의 모든 속성은 공개가 되고 모듈 외부에서 액세스할 수 있지만 반환된 객체의 일부가 아닌 변수는 모듈 외부에서 액세스할 수 없습니다. 그렇기 때문에 price 의 경우 출력으로 800 을 얻지만 color 의 경우 module1 에 비공개이기 때문에 value 가 정의되지 않습니다. 아래 목록과 같이 module1을 수정하여 더 많은 개인 및 공용 속성을 갖도록 하겠습니다.

var module1 = (function () {
 
    //private 
    let color = 'red';
    let model;
    function setModel(m) {
        model = m;
    }
    // public 

    return {
        price: 800,
        getModel: function (m) {
            setModel(m);
            return model;
 
        }
 
    }
 
}());
 
console.log(module1.price); // 800 
console.log(module1.getModel('bmw')); // bmw

보시다시피 public encapsulated functions를 사용하여 private encapsulated 변수에 액세스할 수 있습니다. 주로 모듈 패턴에서 모든 변수는 return 객체의 일부가 될 때까지 비공개입니다.

모듈 패턴은 JavaScript의 클래스를 에뮬레이트합니다. 개체를 반환하여 private 및 public 캡슐화된 변수를 만듭니다. 클로저를 사용하여 개인 정보를 캡슐화합니다. 다이어그램에서 다음을 표시할 수 있습니다.

클로저를 사용하여 개인 정보를 캡슐화합니다. 다이어그램에서 다음을 표시할 수 있습니다.

모듈 패턴의 또 다른 변형은 Revealing Module Pattern입니다. 유일한 변형은 아래 목록과 같이 객체를 반환한다는 것입니다.

var module1 = (function () {
 
    //private 
    let color = 'red';
    let model;
    function setModel(m) {
        model = m;
    }
    let privatePrice = 800;
    let getModel = function (m) {
        setModel(m);
        return model;
 
    }
    // public 

    return {
        price: privatePrice,
        model: getModel
 
    }
 
}());
 
console.log(module1.price); // 800 
console.log(module1.model('audi')); // audi 

Module Revealing Pattern은 보다 일관된 이름 지정과 코드의 가독성을 제공합니다. 모듈 패턴을 사용하여 요약하면 JavaScript에서 공개 및 비공개 캡슐화를 달성할 수 있습니다. 이 게시물이 유용하기를 바라며 이제 JavaScript 응용 프로그램에서 Module Pattern을 구현하십시오.

이 게시물이 유용하기를 바랍니다. 읽어 주셔서 감사합니다.  이 게시물이 마음에 들면 공유해주세요. 또한 Infragistics Ignite UI for Angular 구성 요소를 체크아웃하지 않았다면 체크아웃하십시오! 웹 앱을 더 빠르게 코딩하는 데 도움이 되는 30+ 재료 기반 Angular 구성 요소가 있습니다.

데모 요청