IIFE(Immediately Invoked Function Expression)란?

즉시 호출 함수 표현식으로, 정의와 동시에 즉시 실행되는 함수를 말한다.

require 함수도 호출되는 즉시 실행된다.

require()

Node.js에서 require 함수는 일반적으로 외부의 모듈을 불러올 때 사용된다.

자바스크립트는 자바스크립트 파일 하나가, 하나의 모듈이다.

그리고 Node.js가 이 모듈을 로드할 때, **'Module wrapper function'**이라는 함수로 모듈 내의 전체 코드를 감싸주는 작업을 하게 된다 .

'Module wrapper function' 의 형태

(function (exports, require, module, __filename, __dirname) {
  // 모듈 코드
});

여기서,

exports 객체와 module.exports(module 객체의 exports 프로퍼티)가 가리키는 객체는 '동일한' 객체이다.

모듈 내부의 것들을 외부로 공개하기 위해 exports나 module.exports를 쓰는 것은 이 객체에 접근하기 위해서이고, 바로 이 객체다른 모듈에서 require 함수로 이 모듈을 로드할 때 리턴되는 객체 이다.

JSpractice.js라는 파일에서 내부 모듈을 export를 통해 내보내고