Module 이해

이정기·2022년 12월 14일
0

TIL

목록 보기
42/71
post-thumbnail

모듈(Module)이란

  • 모듈(Module)은 "Javascript 파일" 단위로 분리된 코드이다. 여기서의 "Javscript 파일" 은 특정한 기능을 가진 여러 개의 함수와 변수들의 집합을 말한다.

모듈 특징

  • 하나의 모듈에서 다른 모듈을 호출하여 사용할 수 있다.
  • 그 자체로도 하나의 프로그램이면서 다른 프로그램의 부품으로도 사용할 수 있다.
  • 보통 1개의 파일 = 1개의 모듈

모듈의 필요성

  • 코드 베이스를 분리할 수 있으며, 이를 통해 코드를 구조적으로 관리할 수 있다.
  • 코드를 재사용 할 수 있는 모듈화(modularize) 가능
  • 모듈의 인터페이스(Interface)만 노출 시킬 수 있다.
  • 종속성을 관리할 수 있게 된다.

JavaScript 표준을 위한 움직임

CommonJS(CJS)

  • 브라우저 이외의 환경에서 모듈을 사용할 수 있도록 고안된 명세이다.
  • 설정을 따로 추가하지 않은 이상, Node.js에서는 CommonJS를 기본으로 사용
  • 전역 스코프에 정의 되어있는 require 함수로 대표.
  • require함수는 경로 혹은 문자열을 가지고 내부 알고리즘을 통해 모듈을 가져오고 종속성을 처리

모듈 사용 이해

  • export 명령어를 변수나 함수 앞에 붙이면 외부 모듈에서 해당 변수나 함수에 접근할 수 있다.
  • import, require 명령어를 사용하면 외부 모듈의 기능을 가져올 수 있다.
    require : CommonJS로 모듈 시스템을 관리할 때 사용
    import : ES6(ES2015)로 모듈 시스템을 관리할 때 사용

모듈 사용해보기

모듈 등록

package.json파일

{
"type": "commonjs"
}

제일 바깥 괄호 밑에다 작성, 위에 자식 중괄호가 있다면 ','를 꼭 붙여줘야한다.

함수로 보내기

function add(a, b){
    return a + b;
}

module.exports = add;

require로 받기

const add = require("./math.js")

console.log(add(10,30));

add 라는 함수를 바로 내보내주기 때문에 정상적으로 출력된다.

객체로 보내기

exports.add = function add(a, b){
    return a + b;
}

받는 방법_01

const add = require("./math.js")

console.log(add.add(10,30));

객체로서 내보내기 때문에, 객체로 불러줘야한다.

받는 방법_02 - 객체 구조문

const {add} = require("./math.js")

console.log(add(10,30));

객체로서 내보내기 때문에, 객체로 불러줘야한다.

또는 객체로 보내줄 수도 있음

function (a, b){
	return a + b;
}

module.exprots = {add: add};

모든 방법 정리

// function add (a, b){
// 	return a + b;
// }


// 모듈을 호출 했을 때, add 키 값에는 add 변수 함수가 가지고 있는 값이 할당된다.
// //함수를 할당해서 쓸 수도 있다.
// //변수에 할당된 익명함수를 내보낼 수 있다.
const add = (a, b) => {
    return a + b;
}
exports.add = add;

// 모듈을 호출 했을 때, add 키 값에는 (a, b){return a + b;} 익명함수가 할당되는 방법이다.
// exports.add = function(a, b){
//     return a + b;
// }

// 모듈을 호출 했을 때, add 키 값에는 add 함수가 들어가는 방법이다.
// module.exports = { add : add};

// 모듈 그 자체를 바로 add 함수를 할당한다.
// module.exports = add;
profile
Node.js 로 꿈을 꾸었다..

0개의 댓글