오늘의 핵심 학습 내용은 코드를 깔끔하게 분리하고 재사용할 수 있게 해주는 내보내기(module.exports)와 가져오기 (require()), 그리고 터미널에서 입력을 받을 수 있는 process.argv입니다.
- 가독성 저하: 어디에 어떤 코드가 있는지 찾기 어려워집니다.
- 유지보수 지옥: 오류가 났을 때 원인을 찾기 힘듭니다.
- 협업 불가: 여러 사람이 한 파일을 동시에 수정하며 함께 작업하기 힘듭니다.
- 재사용성 down: 똑같은 코드를 다른 곳에서 또 복사/붙여넣기 해야 합니다.
이러한 문제점을 해결하기 위한 구원투수가 바로 내보내기(module.exports)와 가져오기 (require()) 입니다
작성한 함수나 변수를 다른 파일에서 쓸 수 있도록 밖으로 꺼내주는 역할입니다.
function add(a, b) {
return a + b;
}
// 하나의 함수만 깔끔하게 내보내기
module.exports = add;
function add(a, b) { return a + b; }
function subtract(a, b) { return a - b; }
function multiply(a, b) { return a * b; }
function divide(a, b) { return a / b; }
function double(a) { return a * 2; }
// 객체 형태로 묶어서 여러 개를 한 번에 내보내기
module.exports = { add, subtract, multiply, divide, double };
다른 파일에서 내보낸 값을 내 파일로 불러오는 역할입니다. 상황에 따라 통째로 가져오거나, 필요한 것만 쏙쏙 골라 가져올 수 있습니다.
// "./math"는 같은 디렉토리에 있는 math.js 파일을 의미합니다. (.js 생략 가능)
const math = require("./math");
console.log(math.add(10, 5)); // 15
// 객체 안에서 원하는 함수만 직접 꺼내서 사용합니다.
const { add, subtract } = require("./math");
console.log(add(10, 5)); // 15
⚠️ 주의하기!
- 구조 분해 할당을 할 때, 원본 파일에 존재하지 않는 값을 가져오려고 하면
undefined가 저장됩니다.- 경로를 지정할 때
./은 현재 디렉토리,../은 상위 디렉토리를 의미합니다. (경로 표시 누락 주의!)
프로그램을 실행할 때 터미널(명령어 창)을 통해 사용자가 전달한 인자(arguments)들을 받아오는 배열입니다.
console.log(process.argv);
사용자가 터미널에 입력한 값은 무조건 문자열(string) 형태로 저장돤다.
따라서 숫자로 계산을 해야 한다면 반드시 형변환을 해주어야 한다
Number(), + 단항 연산자, parseInt() 등| 인덱스 | 의미 |
|---|---|
argv[0] | Node.js 실행 파일의 전체 경로 |
argv[1] | 현재 실행한 JS 파일의 전체 경로 |
argv[2] 이상 | 사용자가 실제로 입력한 값 |
module.exports와require()를 사용할 때 "어느 파일에서 내보내고(export), 어느 파일에서 받아오는지(require)" 혼동하지 않도록 해야겠다.