module 사용하기
앞장에서 http, url과 같은 모듈을 require( ) 함수를 이용해서 해당 모듈을 객체화 한 후에 사용해 보았습니다. 이번장에서는 module을 직접 만들어보고 내가 만든 모듈을 require로 객체화한 후에 사용해 보도록 하겠습니다.
가. require('모듈이름')
js파일을 모듈화하기 위해 사용하는 내장객체입니다. node.js에서 모듈은 파일구조입니다. 앞장에서 사용했던 http 모듈을 예로 살펴보면 http 모듈은 특정폴더에 http.js 파일 또는 http 폴더에 index.js 파일로 존재하게 됩니다. 즉 아래와 같은 구조를 가집니다.
require('모듈이름');
/ 모듈이름.js
/ 모듈이름 / index.js
위와 같이 require('모듈이름') 으로 모듈을 호출하면 먼저 '모듈이름.js' 파일이 경로상에 있는지 검색하고 없으면 '모듈이름'으로된 폴더를 검색합니다. 그리고 해당 폴더 아래에 index.js 파일을 모듈로 가져와서 사용하게 됩니다.
나. exports로 모듈 만들고 사용하기
이번에는 custom 모듈을 만들고 이 모듈을 호출해서 사용해 보도록 하겠습니다. 먼저 프로젝트 폴더에 custom_module.js 파일을 만들고 아래와 같이 입력합니다.
- custom_module.js
// 1. exports 객체를 사용해서 sum이라는 변수를 만들고, sum 변수에 function 을 사용해서 하나의 파라미터를 가진 함수식을 대입
exports.sum = function(max) {
// 2. 입력된 값을 최대값으로 1부터 최대값까지 더해서 반환하는 로직
return (max+1)*max/2;
}
// 3. var1 변수에 'NEW VALUE 100' 입력
exports.var1 = 'NEW VALUE 100';
이번에는 home.js 파일을 만들고 아래와 같이 입력해서 위에서 만든 모듈을 사용합니다.
- home.js
var module = require('./custom_module');
// 1. formatted 특수문자 %d를 사용해서 module.sum( ) 에서 리턴된 숫자값을 출력
console.log('sum = %d' , module.sum(100));
// 2. formatted 특수문자 %s를 사용해서 module.var1의 문자값을 출력
console.log('var1 = %s' , module.var1);
node home 명령어로 실행하면 아래와 출력됩니다.
다. 소스코드 분석
node.js 에서 모듈형태로 사용하기 위해서는 내장객체인 exports를 사용하면 됩니다. exports 객체로 먼저 사용할 변수명을 선언하고 해당 변수명에 함수, 값 또는 객체를 대입해서 사용할 수 있습니다.
첫번째 예제 custom_module.js 는 함수와 값을 대입해보았는데 함수형 언어에서 함수는 객체지향의 객체와 같이 각각의 함수가 객체처럼 포인터를 가집니다. 따라서 예제에서처럼 함수식 자체를 변수에 대입하는게 가능합니다.
- 함수를 객체처럼 사용하기
var 변수명 = function(파라미터) { 함수식 }
두번째 예제 home.js 에서 위의 모듈을 직접 호출해서 사용하게 되는데 node.js의 console.log( ) 함수는 C언어에서이 printf( ) 처럼 formatted 출력을 지원합니다. 따라서 출력할 문자열 중간에 %d, %s 등을 사용해서 두번째부터 입력되는 값을 문자열 내부에 출력할 수 있습니다. C에서와 같이 여러개의 입력문자 또는 숫자를 한번에 처리할 수 있습니다.
- 문자열 출력 여러개 하기
console.log('var1 = %d, var2 = %s, var3 = %d', 105, 'Hello!', 10098);
위와 같이 첫번째 입력값에 여러개의 formatted 특수문자를 삽입하고, 두번째 입력값 부터 특수문자의 개수만큼 입력값을 지정하면 해당값들이 모두 한번에 출력됩니다.