javascript 런타임 (자바스크립트가 동작할 수 있는 프로그램)
웹 브라우저에서만 동작하는 javascript를 V8엔진에다 살을 붙여 실행시킬 수 있는 런타임을 만든 것
서버를 만들 수 있지만 서버만 만드는 것은 아니다.
특징
Non-Blocking I/O
- 다 처리하지 않고 일단 전달
싱글 쓰레드
노드를 사용하는 이유
웹 브라우저에서는 내 시스템 컨트롤이 불가능하지만 노드는 내 컴퓨터에서 파일 읽기, 생성, 열기 다 가능 -> 시스템 컨트롤하기 위해 사용
구버전
// 003.js
const 이름 = 'lee';
const 나이 = 10;
module.exports.이름 = 이름;
module.exports.나이 = 나이;
// 002.js
// 003.js에서 읽어오기
const 이님개인프로필 = require('./003');
// 003.js로도 작동함
console.log(이님개인프로필.이름);
console.log(이님개인프로필.나이);
import * as 개인프로필 from './003.js';
console.log(개인프로필.이름);
console.log(개인프로필.나이);
하면 작동이 안된다.
해결
npm init --yes
를 통해 package.json 파일이 생성되는데
이때 main 아래에 type을 명시해줘야 한다.
그나마 최신 문법 사용
export
사용
// 003.js
export const 이름 = 'lee';
export const 나이 = 10;
// 구버전
// module.exports.이름 = 이름;
// export -> 밖에서도 변수 이름 사용할 수 있도록 해줌
import
사용
// 004.js
// * 모든 데이터를 다 가져와서 개인프로필 이름으로 사용
// 오브젝트형
// 개인프로필 = {이름 : 'lee', 나이 : 10}
import * as 개인프로필 from './003.js'
console.log(개인프로필.이름);
console.log(개인프로필.나이);
as
별칭 사용
{구조분해할당}
// 006.js
// {} -> 구조분해할당으로 데이터를 가져오기
// 서로 파일에서의 이름이 같아야 한다.
import {이름, 나이} from './003.js';
console.log(이름);
console.log(나이);
{구조분해할당}
+ as
별칭 사용
// 007.js
import {이름 as a, 나이 as b} from './007.js'
console.log(a);
console.log(b);
export default
하는 경우// 008.js
export default function hello() {
console.log('hello world');
}
// 009.js
export default function sum(a, b) {
return a + b;
}
// 010.js
import hello from './008.js';
import sum from './009.js';
hello();
console.log(sum(3,5));
}
export default
없애는 경우// 011.js
export function sum(a, b) {
return a + b;
}
{이름}
으로 사용하기 (에러 발생)
// 012.js
import {sum} from './011.js';
// export에서 default가 없는 경우 {이름}을 사용해야 합니다.
console.log(sum(3,5));
}
// 013.js
const a = 10;
const b = 20;
const c = 30;
export{a,b,c};
import {a,b,c} from './013.js';
console.log(a, b, c)
default 있는것과 없는것
같이 사용// 015.js
export function a() {
console.log('a');
}
export function b() {
console.log('b');
}
export function c() {
console.log('c');
}
export default function d() {
console.log('d');
}
// 016.js
import a from './015.js';
a();
// default 우선 출력 -> d 출력됨
////
import {a, b, c} from './015.js';
a();
// a 출력됨
////
import * as all from './015.js';
console.log(all);
console.log(all.default());
// [Module: null prototype] {
// a: [Function: a],
// b: [Function: b],
// c: [Function: c],
// default: [Function: d]
// }
// d
import d, {a, b, c} from './015.js';
d();
// d 출력됨
export default
값은 중복해서 사용하면 안된다.
함수의 이름이 없는 경우
export default function() {
console.log('이름없음');
}
import 안녕 from './017.js';
console.log(안녕);
// 이름없음 출력됨