readline 모듈 From Javascript

남성윤·2023년 1월 31일
0

학습 일지

목록 보기
17/369

Readline 모듈

정의

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)
});
profile
안녕하세요, Blog 2022.06 ~

0개의 댓글