본문 바로가기
JavaScript/이론 및 용어

readline 한 줄 씩 입력 받기

by tokkiC 2022. 8. 6.

언어마다 코딩테스트의 입출력시에 자주 쓰이는 것들이 있다

input, cin, scanf, getline 등등 각각 공백을 기준으로나 줄을 기준으로 입력을 받는다

자바스크립트도 공백을 기준으로 한 input 이 있지만 줄단위로 입력을 받는 readline 모듈이 존재한다

자바스크립트의 내 내장 모듈로서 readable 스트림에서 rereadline 모듈을 이해해보자

완벽하게 이해해보자구

기본 형태는 아래와 같다

const readline = require("readline");

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

rl.on("line", (line)=>{
	/*입력 받는 값을 처리하는 코드*/
	rl.close();
});

rl.on("close", ()=>{
	/*입력이 끝나고 실행할 코드*/
	process.exit();
});

위의 코드를 하나씩 해석하자면

const readline = require("readline");

require 는 인자로  '파일 경로' 나 '모듈이름' 을 써서 외부 모듈을 불러올 수 있다. 불러와서 변수 readline 에 저장한다

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

createInterface() 메소드로 readline 모듈의 인터페이스 객체 rl를 만드는데,

객체의 input, output 속성은 표준 입출력을 따른다

rl.on("line", (line)=>{
    /*입력 받는 값을 처리하는 코드*/
    rl.close();
});

인터페이스 객체 rl 는 입출력 관련 이벤트를 처리 할 수 있는데

on 메소드를 통해 이벤트 발생 시 실행할 동작을 지정 가능하다

on 메소드의 첫번째 인자로 "line" 을 입력하면 해당하는 이벤트가 발생하는데, 

사용자가 콘솔 입력에서 줄바꿈 문자나 Enter 혹은 Return 를 누르기 전까지의 데이터를 처리하는 코드를

함수로 실행시킨다. 입력이 끝나면 인터페이스를 종료하여 무한 입력을 막기 위해 rl.close() 메소드를 호출해서

readable 스트림을 종료한다

rl.on('close', () => {
    // 입력이 끝난 후 실행할 코드
})

on 메소드의 첫인자로 "close" 를 입력하면 close 이벤트가 발생하는데, 더이상 입력되는 값이 없을 때

실행되는 이벤트이다. 그러니 위에서 rl.close() 입력이 종료되면 화살표 함수 안에

위에서 받은 입력값을 이용해서 사용하는 로직을 구현하면 된다

댓글