본문 바로가기
공부

[Node] Module wrapper function

by samosa 2024. 11. 19.

Node.js에서 JavaScript 파일은 실행되기 전에 모듈 래퍼 함수로 감싸진다. 이 함수는 모듈별 스코프를 제공하여 하나의 모듈에서 선언된 변수나 함수가 다른 모듈에서 접근되지 않도록 하고, 전역 스코프 오염을 방지하는 역할을 한다.

 

모듈 래퍼 함수는 다음과 같은 형태로 제공된다:

(function(exports, require, module, __filename, __dirname) {
  // 모듈 코드가 실제로 여기에 위치한다.
});

이 함수는 Node.js가 자동으로 코드 주변을 감싸며, 다음과 같은 인자를 제공한다:

  • exports: module.exports의 참조로, 모듈에서 함수나 객체를 내보내는 데 사용된다.
  • require: 다른 모듈을 불러오는 함수이다.
  • module: 현재 모듈을 나타내는 객체로, 모듈에서 함수나 객체를 내보내는 데 사용된다.
  • __filename: 실행 중인 파일의 절대 경로이다.
  • __dirname: 현재 모듈의 디렉터리 이름이다.

이 래퍼 함수는 모듈에서 정의된 변수가 해당 모듈에만 스코프가 적용되도록 하여 전역 변수로 노출되지 않게 보장한다.

사용 예시 코드

다음은 모듈 래퍼 함수의 동작 방식을 설명하는 간단한 코드 예시이다:

example.js 파일:

console.log(__filename); // 현재 파일의 절대 경로 출력
console.log(__dirname); // 현재 디렉터리의 경로 출력

function sayHello(name) {
  console.log(`Hello, ${name}!`);
}

module.exports = sayHello;

이 코드는 실제로 다음과 같이 Node.js가 실행할 때 감싸져 실행된다:

(function(exports, require, module, __filename, __dirname) {
  console.log(__filename);
  console.log(__dirname);

  function sayHello(name) {
    console.log(`Hello, ${name}!`);
  }

  module.exports = sayHello;
});

이 래퍼 함수 덕분에 sayHello 함수는 example.js 파일 내에서만 스코프가 유지되며, module.exports를 통해서만 외부로 내보낼 수 있다.