ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js (4) - 모듈
    Node.js 2022. 12. 6. 21:25
    728x90

    1. 모듈

    어제 다뤘던 모듈에 대해서 좀 더 깊게 생각해 보자.

    JS는 브라우저에서 사용하던 언어로 모듈기능이 없다는 것이 단점이었다. 이는 여러개의 JS파일을 로드하더라도 하나의 파일로 합병되며

    동일한 유효범위를 갖는다는 문제점을 갖게 된다는 것이다. (물론 ES6에서 모듈기능이 추가되긴 하였다.)

    이를 해결하기 위해 등장한 Node.js에서는 최소단위로 사이트의 기능을 분할할 수 있다는 장점이 추가되었다. module은 파일과 1대1의 대응 관계를 지니고, 하나의 모듈은

    자신만의 독립적인 실행 영역을 갖게 된다. 따라서 브라우저의 JS와 달리 전역변수의 중복 문제가 발생하지 않는다.

    하지만 공유라는 좋은 목적을 포기 할 수 없기 때문에 module.exports 또는 exports객체를 통해 정의하고, 외부로 공개하며, 이렇게 공개된 모듈은 require 함수를 사용해서 임포트 한다.

    circle.js

    const Math = {
        ...,
        PI:{
            3.141592...
        }
    }
    
    const {PI} = Math
    exports.area = (r) => PI * r * r;
    
    exports.circumference = (r) => 2 * PI * r;
    const circle = require("./circle.js"); // == require('./circle')
    
    console.log(`지름이 4인 원의 면적: ${circle.area(4)}`);
    console.log(`지름이 4인 원의 둘레: ${circle.circumference(4)}`);

    1-1 모듈.exports

    모듈은 독립적인 파일 스코프를 갖기 때문에 모듈 안에 선언한 모든 것들은 기본적으로 해당 모듈 내부에서만 참조할 수 있습니다. 만약 모듈 안에 선언한 항목을

    외부에 공개해 다른 모듈들이 사용하게 하려면 exports객체를 사용해야 합니다.

    모듈을 파일로 작성하고 외부에 공개할 대상을 exports 객체의 프로퍼티 또는 메소드를 정의합니다. 그리고 모듈을 전역 함수 require()를 이용해 객체로 받습니다.

    exports로 주는 방식에는 두가지가 존재합니다.

    • module.exports방식

    • exports.[주고싶은 이름] 방식 이 있습니다.

    첫번째 방식은 하나의 값(원시타입, 함수, 객체)를 할당해서 사용하는 것이고

    exports.[키값] = 값은 객체의 프로퍼티 또는 메소드를 여러개 정의해서 보내는 방식입니다.

    1-2 exports로 함수보내기

    모듈에서 함수를 보낼때도 마찬가지로 두가지 방식이 존재합니다.

    예를 들어 다음과 같은 함수가 있다고 해봅시다.

    const a = (a,b) => a+b
    const b =(a,b) =>a-b
    
    그렇다면 첫번째로는 다음과 같이 보낼 수 있습니다.
    
    module.exports = {
        a:a,
        b:b
    }
    또는 ES 6문법에서 사용하는 방식으로 변수명과 값(함수명)이 같다면 다음과 같이 쓸 수 있습니다.
    module.exports = {
        a,
        b
    }

    하지만 이 방식들 보다는 애초에 만들때 보내는 방식이 함수를 전달할때는 더욱 좋습니다.

    exports.a = (a, b) => a + b;
    exports.b = (a, b) => a - b;

    'Node.js' 카테고리의 다른 글

    Node. js (6) - __fillname & __dirname / process  (0) 2022.12.06
    Node.js (5) - require, 순환참조, 캐싱  (0) 2022.12.06
    Node.js (3) - 구조분해 할당문  (0) 2022.12.06
    Node.js (2) -console.log와 공식문서  (0) 2022.12.06
    Node.js (1)  (0) 2022.12.05

    댓글

Designed by Tistory.