
js는 스크립트 언어이기 때문에 컴파일 없이 코드를 바로 실행 가능.
노드도 이와 비슷하게 REPL(read, evaluation, print, loop)이라고 부름.
콘솔에서 > node '파일경로' 와 같은 식으로 실행.

모듈 생성시에 모듈이 될 파일(var.js)과 모듈 불러와 사용할 파일(func.js)이 필요
// var.js
const odd = '홀수입니다'
const even = '짝수입니다'
module.exports = { // 변수들 담은 객체 대입
odd,
even,
}
다른 파일에서 module.exports에 대입된 값 사용 가능
func에서 대입된 값들(odd, even) 사용
// func.js
const {odd, even} = require('./var');
// require 함수에 불러올 모듈 경로 적음 (확장자 생략)
function checkOddOrEven(num) {
if (num%2) {
return odd;
}
return even;
}
module.exports = checkOddOrEven; // 내보낼 값
모듈을 사용하는 파일(func.js)을 다시 모듈로 만들 수 있음
module.exports 에는 객체만 아니라 함수나 변수도 대입 가능
// index.js
// var.js와 func.js를 모두 참조
// 모듈 하나가 여러개의 모듈 사용
const {odd, even} = require('./var');
const checkNumber = require('./func'); // 불러올때 변수 이름 다르게 지정 가능
// func의 checkOddOrEven을 checkNumber라는 이름으로 사용
function checkString(str) {
if (str.length % 2) {
return odd;
}
return even;
}
console.log(checkNumber(10)); // 짝수입니다
console.log(checkString('hello')); // 홀수입니다
// 콘솔(터미널)에서 > node index 로 실행

require함수나 module객체는 따로 선언하지 않고 사용 사능
노드가 기본적으로 제공하는 내장 객체이기 때문
// func.js를 ES2015 모듈 스타일로 바꾼 코드
import { odd, even } from './var'; // requires
function checkOddOrEven(num) {
if (num % 2) { // 홀수면
return odd;
}
return even;
}
export default checkOddOrEven; // module.exports
// globalA.js
module.exports = () => global.message;
// globalB.js
const A = require('./globalA');
global.message = '안녕하세요';
console.log(A());
globalA는 global.message값을 반환.
globalB에서는 global객체에 속성명이 message인 값을 대입하고 globalB에서 넣은 globalA의 함수 호출.
B에서 넣은 message값을 A에서도 접근 가능함 보여줌
but 프로그램 커질수록 어떤 파일에서 global객체에 값 대입했는지 찾기 힘들어 유지 보수 어려움
다른 파일 값 사용시에는 모듈 형식으로 만들어서 명시적 값 불러와 사용하는것이 좋다
2. console
3. 타이머
타이머 기능 제공하는 함수는 노드에서 window대신 global 객체 안에 있음
setTimeout과 setInterval은 웹 브라우저에서도 자주 사용
setTimeout(콜백함수, 밀리초): 밀리초 이후에 함수 실행
setInterval(콜백함수, 밀리초): 밀리초마다 함수 반복 실행
setImmediate(콜백함수): 함수 즉시 실행
이 타이머 함수들은 모두 아이디 반환. 아이디 사용해 타이머 취소
clearTimeout(id), clearInterval(id), clearImmediate(id)
현재 파일의 경로나 파일 명 알 수 있다
파일에 __filename과 _dirname 넣어두면 실행 시 파일명과 형재 파일 경로로 바뀜
console.log(__filename); // C:\Users\blues\Desktop\노드\test.js
console.log(__dirname); // C:\Users\blues\Desktop\노드
// var.js
/*const odd = '홀수입니다'
const even = '짝수입니다'
module.exports = { // 변수들 담은 객체 대입
odd,
even,
} */
exports.odd = '홀수입니다'
exports.even = '짝수입니다'
module.exports로 한번에 대입하는 대신 각각의 변수를 exports객체에 하나씩 넣었다.
module.exports와 exports가 같은 객체를 참조하기 때문에 동일하게 동작
console.log(module.exports === exports) // true
따라서 exports 객체에 add 함수 넣으면 module.exports에도 add 함수 들어감
exports객체 사용기 module.exports와의 참조 관계 깨지지 않도록 주의해야 함.
module.exports에는 어떤값이든 대입해도 되지만 exports는 반드시 객체 처럼 속성명과 속성값 대입해야 함.
둘 동시에 안쓰는것이 좋다
노드에서의 this
require
모듈을 불러오는 역할
require는 함수이고 함수는 객체이므로 객체로서 몇가지 속성 갖고있음