Node.js 공식문서에 따르면,
The node:readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time.
이를 번역기를 사용해 번역하면,
node:readline 모듈은 Readable 스트림(예: process.stdin)에서 한 번에 한 줄씩 데이터를 읽기 위한 인터페이스를 제공합니다.
라는 뜻으로, 내가 이해한 바에 따르면 입출력을 한줄씩 처리하는 모듈
이다.
공식 사이트의 readline의 기본 사용법 예시는 다음과 같은데,
const readline = require('node:readline');
const { stdin: input, stdout: output } = require('node:process');
const rl = readline.createInterface({ input, output });
rl.question('What do you think of Node.js? ', (answer) => {
// TODO: Log the answer in a database
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close();
});
실제 사용은 대부분 다음과 같은 방식으로 이용된다고 한다.
const readline = require("redaline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line)=>{
/*입력 받는 값을 처리하는 코드*/
rl.close();
});
rl.on("close", ()=>{
/*입력이 끝나고 실행할 코드*/
process.exit();
});
/*다음과 같이 on을 연결할수도 있다.*/
rl.on("line", (line) => {
/*입력받는 값을 처리하는 코드*/
rl.close();
}).on("close", () => {
/*입력이 끝나고 실행할 코드*/
process.exit();
});
rl.on()
: 인터페이스가 가지는 on()메서드를 사용해 이벤트와 콜백함수를 전달합니다. 위 코드에서 사용된 이벤트로는 "line" 이벤트와 출력 부분에 사용하는 "close" 이벤트가 있습니다.
“line”
: 입력받는 값을 한 줄씩 읽어 문자열 타입으로 전달하는 역할 하는 이벤트입니다.
/입력 받는 값을 처리하는 코드*/
: "line" 이벤트로 받은 내용을 적절하게 처리하는 코드입니다.
rl.close()
: 인터페이스를 종료함으로써 무한히 입력받는 것을 방지합니다. 즉 rl.close()가 호출되면 입력이 끝났다는 것이고, 다음에 "close"이벤트를 발생시켜 입력값을 활용하여 출력값을 도출하는 코드를 작성하게 됩니다.
"close"
: 더이상 입력되는 값이 없을 때 실행되는 이벤트입니다.
/*입력이 끝나고 실행할 코드*/
: 입력이 종료되었음을 알리는 "close"이벤트가 호출된 다음 입력값을 활용해 출력값을 도출하는 코드를 작성합니다.
process.exit()
: 프로세스를 종료시킵니다.
프로그래머스의 문제는
"*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.
위 문제의 해답으로 사용한 readline을 이용한 코드는 다음과 같다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
const num = Number(input[0]);
let Str = ''
for(let i = 0 ; i < num; i++) {
for(let j = 0 ; j <= i; j++) {
Str+='*'
}
Str+='\n'
}
console.log(Str)
});