Module Pattern

종원유·2022년 5월 7일
0

Javascript

목록 보기
2/3

Module Pattern

Module Pattern ?

특정 구성요소를 다른 구성요소와 독립적으로 유지하는데 가장 널리 사용되는 디자인 패턴.
잘 구조화된 코드를 지원하기 위해 느슨한 결합을 제공한다.

Module ?

"Module"은 자바스크립트의 "클래스"이다.
그리고 클래스의 많은 장점 중 하나로 "캡슐화"가 있는데 캡슐화란 상태 및 동작을 다른 클래스에서 엑세스하지 못하도록 보호하는 것을 말한다.(접근 제어자를 통하거나 권한 설정을 통하여)
Module Pattern은 public, private 접근 권한을 가능하게 한다.

  • 모듈은 변수와 메서드를 보호하는 클로저처럼 private를 허용한다.
  • 객체를 반환한다.

const bookModule = (function() {
  // private
  let title = 'JavaScript';
  let price = 15; //즉 모듈 패턴을 사용하면 접근할 수 없음 !! private Zone
  // public
  return {  //접근할 수 있음 !! public Zone
    printTitle: function () {
      console.log(title);
    }
  }
})(); 

bookModule.printTitle(); 

모듈을 생성하여, 외부에서 직접 엑세스할 수 있는(return 객체)와 접근할 수 없는 부분을 나눈다.

return 객체의 필드만 접근할 수 있고, public zone과 private zone은 느슨한 결합으로 이루어진다.


Revealing Module Pattern

Revealing Module Pattern ?

Module Pattern의 변형이다.
목적은 캡슐화를 유지하고 객체 리터럴에서 반환된 특정 변수와 메서드들을 잘 나타내기 위함이다.


const reveaingModule = (() => {
  let privateValiable = 10;
  
  var privateMethod = () => {
    console.log('내부 정보입니다.');
    privateValiable++;  //내부 정보 열람 카운트 +1
  };
  var methodToExpose = () => {
    console.log('내부 정보입니다2.');
  };
  var methodToExpose2 = () => {
    privateMethod();
  };

  return {
    first : methodToExpose, //내부 정보를 외부로 공개하고 호출할 순 있지만 직접 값을 전달할 수는 없음.
    second : methodToExpose2
  };
})();
reveaingModule.first();
reveaingModule.second();
console.log(reveaingModule.first);// out : () => { console.log('내부 정보입니다2.'); }
console.log(reveaingModule.second); // out : () => { privateMethod(); }

private한 모듈의 필드를 직접 엑세스할 수 없지만, public Zone(Return 객체)를 통하여 일부 내부 필드를 엑세스, 확인할 수 있다.

profile
개발자 호소인

0개의 댓글