Node.js에서 사용자 입력을 받을 때 사용하는 모듈이다.
즉, 터미널(콘솔)에서 입력을 받고 출력하는 기능을 제공하는 라이브러리다.
const readline = require('readline'); //Module import
//인터페이스 생성
const rl = readline.createInterface({
input: process.stdin, //입력: 터미널에서 입력받음
output: process.stdout //출력: 터미널에서 출력
});
// 질문을 출력하고 사용자 입력을 받음
rl.question('당신의 이름은 무엇인가요? ', (answer) => {
console.log(`안녕하세요, ${answer}님!`);
rl.close(); //입력종료
});
터미널에서 실행:
node script.js
사용자가 입력하면:
당신의 이름은 무엇인가요? 홍당무
안녕하세요, 홍당무님!
사용자가 여러 개의 입력을 해야 하는 경우에는 rl.on('line', callback)을 사용한다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let count = 0;
console.log('숫자를 입력하세요. 종료하려면 "exit"입력');
rl.on('line', (input) => {
if(input.toLowerCase() === 'exit'){
console.log(`입력한 숫자의 개수: ${count}`);
rl.close();
} else{
console.log(`입력한 값: ${input}`);
count++;
}
})
숫자를 입력하세요. 종료하려면 "exit"입력.
1
입력한 값: 1
2
입력한 값: 2
3
입력한 값: 3
exit
입력한 숫자의 개수: 3
입력된 여러 값을 배열로 저장 할 수 있다.
const readline = requre('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let inputs = [];
console.log('입력할 값을 작성하세요. 종료하려면 "done" 입력');
rl.on('line', (input) => {
if(input.toLowerCase() === 'done'){
console.log('입력된 값들', inputs);
rl.close();
} else{
inputs.push(input);
}
});
readline은 기본적으로 콜백을 사용하지만, promise를 이용해 async/await스타일로 변환할 수도 있다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
//promise 기반 질문 함수
const question = (query) => {
return new Promise(resolve => rl.question(query,resolve));
};
(async () => {
const name = await question('당신의 이름은? ');
const age = await question('나이는? ');
console.log(`안녕하세요, ${name}님! 당신은 ${age}살이군요.`);
rl.close();
})();
당신의 이름은? 홍길동
나이는? 25
안녕하세요, 홍길동님! 당신은 25살이군요.
파일을 읽을 때도 readline을 활용할 수 있다.
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: fs.createReadStream('example.txt'), // 파일 읽기
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
console.log(`읽은 줄: ${line}`);
});
| 메서드 | 설명 |
|---|---|
| rl.question(query, callback) | 한 번의 입력을 받고 종료 |
| rl.on('line', callback) | 여러 줄 입력을 받을 때 사용 |
| rl.close() | 입력 인터페이스 종료 |
| rl.pause() | 입력 일시 정지 |
| rl.resume() | 입력 정지된 입력을 다시 시작 |
| rl.setPrompt(prompt) | 입력 프롬프트 설정 |
💡 CLI(커맨드라인 프로그램)를 만들거나, 사용자 입력을 받을 때 readline을 활용하면 편리하다! 🚀