노출 모듈 패턴

자바스크립트의 문제 - 전역 네임스페이스 오염

​ 자바스크립트에서는 모든 변수와 함수가 기본적으로 전역 네임스페이스에 속하게 되어 이름이 충돌할 가능성있습니다.

​ 예를 들어, 두 개의 서로 다른 스크립트 파일이 같은 이름의 전역 변수나 함수를 정의하면, 한 파일에서 정의한 변수나 함수가 다른 파일에서 정의한 것을 덮어쓸 수 있습니다. 이는 예상하지 못한 버그를 유발하고, 디버깅을 어렵게 만듭니다.

노출 모듈 패턴 사용

노출 모듈 패턴(Revealing Module pattern) 은 자바스크립트에서 사용하는 패턴으로, 객체의 일부 프로퍼티와 메서드를 공개하고 일부를 비공개로 유지하는 방식을 제공합니다. 이 패턴은 모듈의 캡슐화를 통해 코드의 유지보수성을 향상시키고, 공개/비공개 멤버를 명확히 구분함으로써 코드의 가독성을 높이는 데 도움을 줍니다. 또한 전역 네임스페이스 오염 문제도 방지할 수 있습니다.

노출 모듈 패턴의 기본 구조는 다음과 같습니다.

var myModule = (function () {
  // 비공개 변수
  var privateVar = 'I am private...';
  
  // 비공개 함수
  var privateMethod = function () {
    console.log('Accessing private method');
  };

  // 공개될 변수와 메서드를 가진 객체를 반환
  return {
    publicVar: 'I am public...',

    publicMethod: function () {
      console.log('Accessing public method');
      // 공개 함수 내에서 비공개 변수와 메서드에 접근할 수 있음
      privateMethod();
      console.log(privateVar);
    }
  };
})();

myModule.publicMethod(); 
// 'Accessing public method', 'Accessing private method', 'I am private...' 가 출력됨

​ 이 패턴을 사용하면, 모듈의 내부 상태를 보호하고, 어떤 부분을 API로 공개할 것인지 명확히 표현할 수 있습니다. 이렇게 모듈화된 코드는 테스트와 유지보수가 쉽습니다. 또한 이 패턴은 즉시 실행 함수 표현식 (IIFE, Immediately Invoked Function Expression)을 사용하므로 모듈의 초기화 로직을 즉시 실행시킬 수 있습니다

즉시 실행 함수 표현식

즉시 실행 함수 표현식(Immediately Invoked Function Expression, IIFE)은 자바스크립트에서 사용하는 디자인 패턴 중 하나입니다. 이 패턴은 함수를 선언함과 동시에 즉시 실행합니다. 기본 구조는 다음과 같습니다:

(function () {
  // statements
})();

이 패턴의 주요 이점 중 하나는 변수의 스코프를 제한하여 전역 네임스페이스를 오염시키지 않는 것입니다. IIFE 내에 선언된 변수들은 함수가 종료되면 메모리에서 제거되므로, 메모리 관리 측면에서도 효율적입니다.

이 패턴을 사용하면, 애플리케이션이 로드되자마자 함수가 실행되어 초기화 로직을 처리할 수 있습니다. 이러한 특성으로 인해 IIFE는 주로 플러그인이나 라이브러리 등을 개발할 때 사용됩니다.

예를 들어, 아래와 같은 상황에서 IIFE 를 사용할 수 있습니다:

(function () {
  // 선언한 변수는 이 함수 내에서만 접근 가능
  var firstName = 'John';
  var lastName = 'Doe';

  // 초기화 로직
  var greeting = 'Hello, ' + firstName + ' ' + lastName;
  console.log(greeting); // 'Hello, John Doe' 출력

  // 이렇게 함수를 선언하고 즉시 실행하면,
  // firstName, lastName, greeting 변수는 이 함수 스코프 내에서만 존재하며, 함수 외부에서는 접근할 수 없습니다.
})();

예상 질문 및 답변

노출 모듈 패턴이란?

​ 노출 모듈 패턴은 자바스크립트에서 사용하는 패턴으로, 객체의 일부 프로퍼티와 메서드를 공개하고 일부를 비공개로 유지하는 방식을 제공합니다. 이 패턴은 모듈의 캡슐화를 통해 코드의 유지보수성을 향상시키고, 공개/비공개 멤버를 명확히 구분함으로써 코드의 가독성을 높이는 데 도움을 줍니다.

자바에서 노출 모듈 패턴이 없는 이유?

​ 노출 모듈 패턴은 기본적으로 자바스크립트와 같은 언어에서 발생하는 특정 문제, 즉 전역 네임스페이스 오염 문제를 해결하기 위한 디자인 패턴입니다. 자바스크립트에서는 모든 변수와 함수가 기본적으로 전역 네임스페이스에 속하기 때문에 충돌이 발생할 수 있는데, 이를 방지하기 위해 모듈 패턴을 사용합니다.

​ 반면에 자바에서는 패키지와 클래스를 사용하여 네임스페이스를 구분하고, private, protected, public 등의 접근 제어자를 사용하여 클래스 내부의 멤버에 대한 접근을 제어할 수 있습니다. 따라서 자바에서는 노출 모듈 패턴과 같은 디자인 패턴이 필요 없습니다.

댓글남기기