node.js 콘솔 값 입력 받기

업데이트:

python으로 알고리즘 공부하는 중 프론트엔드는 javascript로 코딩테스트를 많이 본다고해서 js로 시작하는데 node.js에서는 C나 python처럼 편하게 입력할 수 있는 시스템이 없다는 것을 알게되었습니다.
조금은 다른 방법으로 콘솔 입력 값을 받아오는 것을 알아보도록 하겠습니다.

1. console에 입력해보자!

자바스크립트(node.js)에는 c나 python 처럼 간단하게 입력할 수 있는 시스템이 없습니다…

1.1 readline

JS의 내장 모듈인 readline 모듈을 불러와서 인터페이스 객체를 생성해야합니다.

const readline = require('readline');

const rl = readline.createInterface({
   input: process.stdin,
   output: process.stdout
});

rl 객체는 event-driven 방식으로 동작합니다. 간단히 설명하자면 키보드 입력,마우스 클릭 과 같은 자바스크립트 이벤트의 한 종류로 line event를 사용해서 해당하는 값을 가져올 것 입니다.
line 은 한 줄이 입력되는 이벤트 입니다.
close event를 사용해서 언제까지 입력할 것인지를 알 수 있습니다. 만약 close가 없다면 계속해서 입력을 받을 것 입니다.

2. 상황에 따라 달라지는 입력 받는 방법

처음 1.1 인터페이스 객체를 생성하고 rl을 사용하면 되겠구나 했는데!! 웬걸 입력받는 값에 따라 다르게 작성해야하다니..😂

  • 하나의 정수 입력 받기
  • 무한 입력 받기
  • 정수 두 개 입력 받기
  • 한개의 정수 입력 받고, N개 정수 입력 받기

2.1 하나의 정수 입력 받기

let data;

rl.on('line', ( line ) => {
  data = Number(line);
  rl.close();
})

2.2 무한 입력 받기

let data;

rl.on('line', (line) => {
  data = Number(line);
})

만약 무한으로 입력되는 것에서 나가고 싶다면 if 조건문을 사용해서 rl.close() 넣어주면 됩니다.

2.3 정수 2개 입력 받기 (공백으로 구분)

let data = [];

rl.on('line', (line) => {
  data = line.split(' ').map((el) => { parseInt(el) })
   
   rl.close();
})

rl.on('close', () => {
  let data1 = data[0];
  let data2 = data[1];
})

2.4 한개의 정수를 입력 받고, N개의 정수 입력 받기

let num = 0;
let numList = [];
let count = 0;

rl.on('line', (line) => {
  if(count === 0) { 
    num = Number(line.trim());
  }
  else if(count === 1) {
    getNumList(line.trim());
    rl.close();
  }
  count++;
})

function getNumList (input) {
  numList = input.split(' ').map((num) => {
    parseInt(num);
  })
}


참고
BlueHorn07
0부터 1까지

댓글남기기