몽땅뚝딱 개발자

Module Pattern 본문

Development/디자인 패턴

Module Pattern

레오나르도 다빈츠 2025. 4. 10. 20:10

 

Module Pattern

 

정의

하나의 모듈을 만들어서 내부의 변수나 함수를 외부에 노출할지 말지 선택하는 패턴이다.

(=공개/비공개 멤버를 구분해서 관리할 수 있게 해주는 구조)

 

자바스크립트에서 캡슐화(encapsulation)를 위해 널리 쓰였던 디자인 패턴이다. ES6에서 import/export 문법이 생기기 전에도 변수나 함수가 외부에서 막 사용되지 않도록 정보를 숨기는 데 많이 사용됐다. ES6부터는 모듈 시스템이 내장되어있다. (모듈 패턴이 자바스크립트 언어 차원에서 지원되는 구조로 발전한 케이스)

 

모듈 패턴은 IIFE를 이용해서 구현되는 대표적인 패턴이다. 즉시 실행 함수(IIFE, Immediately Invoked Function Expression)는 자체적인 스코프를 만들어서 변수나 함수를 외부에서 접근할 수 없도록 보호해준다. 이렇게 생성된 '안전한 공간'에서 필요한 기능만 외부로 노출하는 방식이 바로 모듈 패턴이다. 모듈 로직을 작성하고 ()를 붙여서 즉시 실행 후, return된 객체만 외부에 남긴다.

 

const CounterModule = (function () {
  // private 변수
  let count = 0;

  // private 함수
  function log(message) {
    console.log('LOG:', message);
  }

  // 공개 API
  return {
    increment() {
      count++;
      log(`Count is now ${count}`);
    },
    getCount() {
      return count;
    },
  };
})();

CounterModule.increment(); // LOG: Count is now 1
console.log(CounterModule.getCount()); // 1
// console.log(CounterModule.count); → undefined (비공개)

 

 

특징

  • 정보 은닉 (캡슐화): 외부에서는 private 변수에 접근 불가
  • 전역 오염 방지: IIFE로 만들어져서 전역 스코프에 변수 안 퍼짐
  • 네임스페이스 제공: 관련된 기능을 한곳에 묶어서 관리 가능
  • 유지보수 쉬움: 모듈 단위로 코드가 명확히 분리됨

'Development > 디자인 패턴' 카테고리의 다른 글

Observer Pattern (Pub/Sub)  (0) 2025.04.10
플럭스(Flux) 패턴  (0) 2025.04.06
Comments