Node

[Node.js] Node.js의 모듈 및 객체에 대하여 알아보기

YaluStar 2023. 2. 2. 00:45

안녕하세요.

Node.js의 모듈 및 객체에 대해서 알아보겠습니다.

 

1. 모듈 (Module)

  • 특정한 기능을 하는 함수나 변수들의 집합
  • 재사용 가능한 코드 조각

 

1-1. 장점

  • 코드 추상화
  • 코드 캡슐화
  • 코드 재사용
  • 의존성 관리

방법1 : module로서 a, b, test 함수를 내보내겠다.

const a = 'a변수';
const b = 'b변수';

function test() {
    console.log('test');
}

// module로서 a, b, test 함수를 내보내겠다.
module.exports = {
    a,
    b,
    test
}

 

방법2 : 각 변수를 바로 넘겨주는 방법

const aa = 1;
const bb = 3;

// 방법 2
module.exports = {
    aa,
    bb
}

 

방법3 : 변수를 array 객체에 저장한 후 array 1개로 넘겨주는 방법

const aa = 1;
const bb = 3;

// 방법 3
const array = {
    aa,
    bb
}

module.exports = array;

 

이런 식으로 방법1, 방법2, 방법3 처럼 다른 방식으로 내보낼 수 있습니다.

 

 

 

다른 파일에 등록한 module 가져오는 방법

require 함수를 이용합니다.

 

t1.js

const aa = 1;
const bb = 3;
function test() {
    console.log('test');
}

module.exports = {
    aa,
    bb,
    test
}

 

t2.js

// require 함수 이용해서 파일 등록
const result = require('./t1.js');

console.log(result);
console.log(result.aa);
console.log(result.bb);
// console.log(result.test);
// result.test 만 작성하면 함수의 정의만 가져옴
result.test();
// 함수뒤에 () 까지 붙어줘야 함수 실행이 됨
// 함수라서 console.log는 뺐음

 

실행방법

  • 터미널 창에서 node ./파일명
  • 파일 있는 경로까지 이동 후에 실행합니다. (cd 명령어 사용)

 

3개의 파일을 사용하는 경우

t1.js

const aa = 1;
const bb = 3;
function test() {
    console.log('test');
}

module.exports = {
    aa,
    bb,
    test
}

 

t3.js

const num = require('./t1.js');
const aa = num.aa;
const bb = num.bb;

console.log('num', num);

function add() {
    return aa + bb;
}


// 1개인 경우
module.exports = add;
// 넘겨준 값 : [Function: add]

 

t4.js

const add = require('./t3.js');

console.log('add', add);
console.log('add()', add());
// 사용할 때 함수 자체로 넘겨 받아서 아래 방식으로 사용해야 함

 

t4.js 파일을 실행하였더니 다음과 결과가 나옵니다.

먼저 t3.js에서 modules을 exports 할 때 add 함수 자체를 넘겨줬습니다.

그래서 t4.js에서 add를 콘솔로 찍으면 넘겨준 값 : [Function: add]로 나옵니다.

함수 자체로 넘겨받은 경우에는 add() 방식으로 작성해야 합니다.

 

 

여기서 t3.js 파일과 t4.js을 조금 수정합니다.

t3.js (수정)

const num = require('./t1.js');
const aa = num.aa;
const bb = num.bb;

console.log('num', num);

function add() {
    return aa + bb;
}

// 여러 개인 경우
// {} 묶어서 보내면 받는 곳에서도 상태가 달라짐
module.exports = { add };
// 넘겨준 값 : { add: [Function: add] }

 

t4.js (수정)

const add = require('./t3.js');

console.log('add', add);
// console.log('add()', add());
// 사용할 때 함수 자체로 넘겨 받아서 아래 방식으로 사용해야 함
console.log('add.add()', add.add());
// { add : function } 형태로 넘어왔을 때는 console.log(add.add()); 로 사용하면 됨

 

t3.js 파일처럼 exports를 할 때 배열로 넘겨주게 되면 t4.js 에서 사용할 때 방식이 완전히 바뀌게 됩니다.

기존 add: [Function: add] 였으나, { add: [Function: add] }로 중괄호에 묶여있는 것을 볼 수 있습니다.

그래서 이런 경우에는 add()에서 add.add() 방식으로 사용해야 온전한 결과 값이 출력됩니다.

 

이전 t3.js에서 module.exports = add;로 넘겨줬다고 해서

t4.js에서 require로 받을 때 변수를 똑같이 add로 설정할 필요는 없습니다.

 

t3에서 add로 넘겨줬지만 t4에서는 result로 받아서 사용하는 코드입니다.

 

t4.js (수정2)

const result = require('./t3.js');

console.log('result', result);
console.log('result', result.add());

 

결과는 동일하게 출력됩니다.

 

 

2. global

  • 노드의 전역 객체
  • 모든 파일에서 접근 가능
  • 생략하여 사용 가능

console 명령어도 원래는 앞에 global이 붙지만 생략하여 사용하는 것이라고 보면 됩니다.

console.log(global);

 

콘솔로 출력하면 이런 결과 값이 나옵니다.

 

console.log(global.console);

global의 console을 확인하면 다음과 같이 나옵니다.

 

2-1. console 기능

 

obj 객체를 만들어 주고 console 기능을 테스트합니다.

let obj = {
    out: {
        in: {
            key: 'value'
        }
    }
};

console.log(obj);
// obj 객체 값 전부 출력
console.log(obj['out']);
// obj 객체의 out 값의 값 전부 출력
console.time('시간');
console.error('error');
// error를 보여주는 함수
console.timeEnd('시간');
// time => timeEnd 까지의 시간 출력, 함수 안의 '값' 이 같은 경우에만 작동
console.table([{name: 'abc'}, {name: 'def'}]);
// 해당 값을 table 방식으로 보여줌
console.dir(obj, {colors: true, depth: 1});
console.dir(obj, {colors: true, depth: 2});
// 객체의 구조를 보여주는 함수
console.trace('Error');
// console.error이 어디서 났는지 찾는 함수

 

3. 파일 경로, 폴더 경로 함수

  • __filename : 현재 파일 경로
  • __dirname : 현재 폴더(디렉토리) 경로
console.log('__filename : ' + __filename);
console.log('__dirname : ' + __dirname);

 

현재 파일 경로와 폴더 경로가 나오는 것을 볼 수 있습니다.

 

4. process 객체

  • 현재 실행 중인 노드 프로세스 정보
  • process.version
  • process.arch
  • process.uptime()
  • process.execPath
  • process.platform
  • process.cpuUsage()
  • process.env # 환경변수
  • 그 외 등
// process 객체 = 현재 실행 중인 노드 프로세스 정보

console.log('process.version : ', process.version);
console.log('process.arch : ', process.arch);
console.log('process.platform : ', process.platform);
console.log('process.cpuUsage : ', process.cpuUsage());

그 외 여러가지가 더 있지만, 여기서는 이 정도만 다루겠습니다.

 

이상으로 Node.js의 모듈 및 객체에 대하여 알아보았습니다.

감사합니다.

 

반응형