본 포스팅의 소스코드는 GitHub에서 확인할 수 있습니다.
5. Modules
이번 강의는 모듈에 대해 진행하도록 하겠습니다.
모듈은 하나의 독립적인 소프트웨어입니다.
모듈을 사용하게 되면 소스코드의 길이가 줄어들어 가독성이 향상되고
기능별로, 함수별로 분리하여 작성하기 때문에 유지 및 보수가 편리합니다.
다른 언어에서의 경험에 빗대자면
C++을 해보신 분이라면 #include
를 통해 사용자 정의 헤더 파일이나 내부 라이브러리를 가져와 사용할 수 있었습니다.
ex)
#include <iostream>
혹은 Python를 사용하셨다면 import
나 from ... import ...
를 통해 다를 모듈을 가져와 사용할 수 있었습니다.
ex)
from math import *
Node.js에서는 module.exports
랑 require
를 이용해서 모듈을 생성하고 가져와 사용할 수 있습니다.
(1) module.exports / require
//add.js
const add=(a,b)=>a+b;
module.exports=add;
두 수의 합을 리턴해주는 add 함수를 정의하였습니다.
맨 마지막 줄 module.exports=add;
를 통해 다른 파일에서 add
함수를 사용할 수 있게 하였습니다.
이 함수를 다른 파일에서 사용하는 방법은 다음과 같습니다.
//app.js
const add=require('./add');
console.log(add(1,2)); // 3
위 소스코드 처럼 require
의 괄호 속에 사용하고자 하는 모듈의 경로를 입력해 주면 module.exports=
에 입력된 함수를 사용할 수 있게 됩니다.
add.js 에서 module.exports=add
로 add
함수를 export 해주었기 때문에
app.js의 require('./add')
는 add.js의 add
함수를 의미하게 됩니다.
그렇다면 module.exports
는 하나의 함수만 가능할까요?
다음 소스코드를 같이 보도록 하겠습니다.
//calc.js
const add=(a,b)=>a+b;
const subtract=(a,b)=>a-b;
const multiply=(a,b)=>a*b;
const divide=(a,b)=>a/b;
module.exports={
add:add,
subtract:subtract,
multiply:multiply,
divide:divide
}
module.exports
에 Object로 함수들을 export 해주었습니다.
그럼 이 모듈은 어떻게 사용할까요?
//calcApp.js
const calc=require('./calc');
const add=calc.add;
const subtract=calc.subtract;
const multiply=calc.multiply;
const divide=calc.divide;
console.log(add(4,2)); // 6
console.log(subtract(4,2)); // 2
console.log(multiply(4,2)); // 8
console.log(divide(4,2)); // 2
첫번째 경우와 비슷합니다.
차이점은 우선 모듈 전체를 가져오기 위한 require('./calc')
부분과
해당 모듈의 함수를 가져오기 위한 calc.add; calc.subtract; ...
부분으로 나뉘어져 있습니다.
module.exports
할때 사용했던 key들을 사용해 주시면 됩니다.
모듈을 export하는데는 또 다른 방법이 있습니다.
//calc2.js
exports.add=(a,b)=>a+b;
exports.subtract=(a,b)=>a-b;
exports.multiply=(a,b)=>a*b;
exports.divide=(a,b)=>a/b;
함수들을 먼저 선언하고 한번에 export한 calc.js와는 다르게
calc2.js는 함수를 선언하는 동시에 export를 합니다.
calc2.js의 방법이 훨씬 간단해 보일 수 있겠지만 주의하셔야 할 점은
exports=add;
와 같이 exports 자체에는 절대로 어떤 값도 대입해서는 안됩니다.
exports가 앞선 예시의 module.exports를 참조하고 있기 때문에,
다른 값이 대입된다면 본래의 속성을 잃어버립니다.
calc2.js를 사용하는 방법은 calc.js를 사용하는 방법과 같습니다.
//calcApp2.js
const calc=require('./calc2');
const add=calc.add;
const subtract=calc.subtract;
const multiply=calc.multiply;
const divide=calc.divide;
console.log(add(4,2)); // 6
console.log(subtract(4,2)); // 2
console.log(multiply(4,2)); // 8
console.log(divide(4,2)); // 2
(2) fs module
이번에는 파일 입출력에 관련된 fs 모듈에 대해 알아보겠습니다.
fs 모듈을 사용하기 위해선 소스코드의 윗부분에
const fs=require('fs');
를 입력해 주셔야 합니다.
이전에는 require('./calc')
처럼 파일의 경로를 지정해줘야 했지만,
기본으로 내장된 모듈이나 추후에 다룰 npm을 이용하여 설치한 모듈은 모듈의 경로를 입력할 필요 없이 모듈의 이름만 입력해 주시면 됩니다.
1) 파일 쓰기
// writeFile.js
const fs=require('fs');
const content='12월 20일 종강';
fs.writeFile('dream.txt',content,(err)=>{
if (err)
throw err;
console.log('파일 썼다!');
});
위 소스코드에서 require('fs')
를 통해 fs 모듈을 불러왔습니다.content
에는 문자열을 입력하였고fs.writeFile(파일명,파일에 쓸 내용,callback)
을 통해
content를 담고 있는 dream.txt를 생성했습니다.
생성된 파일 dream.txt는 다음과 같습니다.
12월 20일 종강
2) 파일 읽기
//readFile.js
const fs=require('fs');
fs.readFile('dream.txt',(err,data)=>{
if (err)
throw err;
console.log(data.toString());
});
위 소스코드에서는 비동기 방식인 fs.readFile(파일명,callback)
을 이용하여 파일을 읽었습니다.
파일을 여는데 에러가 발생하면 if(err) throw err;
로 에러를 처리해 주고,
파일을 읽는 데 문제가 없다면 console.log(data.toString());
으로 콘솔창에 출력합니다.
콘솔창에 출력된 내용은 다음과 같습니다.
12월 20일 종강
fs 모듈에 대해 더 자세히 알아보고 싶으시면 다음 문서를 참고해 주세요.
(https://nodejs.org/api/fs.html)
'Language > Javascript' 카테고리의 다른 글
[Node.js-Tutorial] 7. Middlewares (0) | 2021.07.01 |
---|---|
[Node.js-Tutorial] 6. Express (0) | 2021.07.01 |
[Node.js-Tutorial] 4. Promise, async/await (0) | 2021.07.01 |
[Node.js-Tutorial] 3. Functions (0) | 2021.07.01 |
[Node.js-Tutorial] 2. Variable (0) | 2021.07.01 |
댓글