🌀 간단히 살펴보기
자바스크립트로 알고리즘을 연습할 때 프로그래머스와 같이 입출력을 알아서 해주는 사이트를 이용해 왔다면
백준이나 소프티어와 같이 직접 입출력을 해야 하는 사이트를 마주하는 경우 당황하게 될 것입니다.
따라서 오늘은 자바스크립트에서 입력을 받는 방법 중 'readline' 모듈을 활용하는 방법을 정리해보겠습니다.
기본적인 틀은 다음과 같습니다. (복사하여 사용하기)
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', (line) => {
// 한 줄 입력 시 작업 코드
}).on('close', () => {
// 입력 종료 후 작업 코드
process.exit(0);
});
아래에서 코드를 한 줄씩 자세히 살펴보겠습니다.
🌀 자세히 살펴보기
1) 'readline' 모듈 불러오기
const readline = require('readline');
Node.js에서 콘솔로부터 데이터를 읽고 쓸 수 있도록 도와주는 'readline' 모듈을 불러옵니다.
2) 인터페이스 객체 생성
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
'rl'이라는 이름(변경 가능)의 인터페이스를 객체 형태로 생성합니다. 해당 인터페이스는 입력과 출력을 처리합니다.
input은 키보드나 파일로부터 입력받는 표준 입력을 사용하여 데이터를 읽습니다.
output은 콘솔이나 파일에 출력하는 표준 출력을 사용하여 데이터를 출력합니다.
결과적으로 'rl' 객체를 사용하면 터미널에서 데이터를 입력받고 출력할 수 있습니다.
3) 입력 이벤트 리스너 등록
rl.on('line', (line) => {
});
on('line', 콜백 함수) 이벤트 리스너를 등록합니다. 사용자가 한 줄을 입력하고 엔터를 누를 때마다 콜백 함수가 실행됩니다.
매개변수인 line에는 엔터를 누르기 전까지의 입력값인 한 줄이 저장됩니다.
예를 들어, 사용자가 'Hello, world!'를 입력하고 엔터를 눌렀다면 line = 'Hello, world!'가 됩니다.
4) 출력 이벤트 리스너 등록
.on('close', () => {
process.exit(0);
});
on('close', 콜백 함수) 이벤트 리스너를 등록합니다. on('line', 콜백 함수)에서 받던 입력 스트림이 종료된 후에 콜백 함수가 실행됩니다.
process.exit(0);을 호출하여 프로그램을 정상 종료합니다.
🌀 여러 줄 입력받기
on('line', 콜백 함수) 이벤트 리스너로 입력을 받으면, 지금 입력받고 있는 한 줄만 line에 저장된다고 하였습니다.
따라서 여러 줄을 입력받기 위해서는 입력값을 저장할 배열을 만들고, 한 줄씩 들어오는 입력값을 저장하여 사용하면 됩니다.
예를 들어, 아래와 같이 input이라는 배열을 선언하여 입력값을 저장하는 코드가 있습니다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const input = []; // 여러 줄의 입력값을 저장할 배열
rl.on('line', (line) => {
input.push(line); // 입력된 줄을 배열에 저장
}).on('close', () => {
console.log(input.join(' ')); // 저장된 입력값을 공백으로 조인하여 출력
process.exit(0);
});
여기서 사용자가 두 줄에 걸쳐 'Hello'와 'World', 그리고 '!'를 입력한다면
Hello
World
!
on('close', 콜백 함수) 부분에서 콘솔에 출력되는 값은
각 줄이 띄어쓰기 한 칸과 함께 조인된 'Hello World !'가 됩니다.
Hello World !
읽어주셔서 감사합니다:)