readline? 그게 뭔데?

Lellow_Mellow·2023년 7월 10일
6

JavaScript

목록 보기
2/4
post-thumbnail

블로깅 시작 전에

지금까지 프로그래머스 문제를 풀이하면서 단순히 solution 함수를 완성하는 것으로 문제를 해결해왔기 때문에 JavaScript에서의 입출력은 어떻게 처리하는가에 대해 생각해본 적이 없습니다.

백준에서 문제를 풀이하거나 vscode에서 코드를 작성하여 결과를 확인해보기 위해서는 이러한 입출력을 어떻게 처리하는지에 대해 알고 넘어갈 필요가 있다고 생각하여 이번 포스팅을 진행하게 되었습니다.


이번 포스팅의 목표

이번 포스팅은 JavaScript에서의 입출력 처리에 대해 정리하는 것을 목표로 하고 있습니다. 또한, Node.js를 사용하여 vscode에서 JavaScript를 실행해보는 과정을 담고 있습니다. 간혹 lv 0 문제에서 보았던 readline이 어떤 것인지 알고 넘어갈 수 있는 계기가 되었으면 좋겠습니다.


readline이란?

Readable Stream 에서 한 번에 한 줄 씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈

조금 더 쉽게 이해하자면 데이터를 읽기 위해 인터페이스를 제공해주는 모듈이라고 할 수 있습니다. 이를 이용해서 간단한 readline 사용법에 대해 알아보겠습니다.


readline 사용하기

readline 모듈을 사용하는 방법을 정리하자면 아래와 같습니다.

1. readline 모듈 불러오기

const readline = require("readline");

require 메서드를 이용하여 외부 모듈인 readline을 가져옵니다.


2. readline 인터페이스 생성

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

readlinecreateInterface 메서드를 이용하여 readline.Interface 인스턴스를 생성합니다. inputoutput을 지정해주게 되는데, 여기서 process.stdinprocess.stdout은 각각 아래와 같습니다.

  • process.stdin : standard input에 대한 Readable Stream
  • process.stdout : standard output에 대한 Writable Stream

[ 틈새 지식 - stream이란? ]

  • 일련의 연속성을 갖는 흐름을 뜻합니다. 여기서의 stream은 데이터, 파일의 흐름, 다시 말해 컴퓨터 프로그램과 환경 사이에 미리 연결된 입출력 통로라고 이해할 수 있겠습니다.

3. 입출력 처리하기

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

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

rl.on 을 이용하여 우리는 이벤트와 콜백함수를 전달하게 됩니다. 여기서 자주 쓰이는 이벤트는 line 이벤트와 close 이벤트가 있습니다.

  • line : 입력받은 값을 한 줄씩 읽어 문자열 타입으로 전달하는 이벤트
  • close : 더 이상 입력값이 없을 경우에 해당하는 이벤트

또한 각각의 이벤트와 같이 전달되는 콜백함수 내부의 메서드들은 각각 아래와 같은 의미를 가지고 있습니다.

  • rl.close() : 인터페이스를 종료하여 무한히 입력받음을 방지.
  • process.exit() : 프로세스를 종료

즉, rl.close를 이용하여 무한히 입력받음을 방지하고, 입력이 종료되면 process.exit을 통해 프로세스가 종료됩니다. 상황에 따라 각 주석 부분에 원하는 코드를 작성하여 입출력을 처리할 수 있습니다.


입력값 처리하기

이렇게 입력받은 입력값을 바로 활용할 수는 없습니다. 우리가 얻고자 하는 형태로 변환할 필요가 있습니다. 이 중에서 가장 간단한 경우인, 한 줄로 입력값이 주어지는 경우를 가정하여 코드를 작성해보겠습니다.

10 20 30 40 50

다음과 같이 공백으로 구분된 5개의 숫자가 입력값으로 주어지고, 이를 배열로 저장하여 출력하고자 합니다. 이에 대한 코드는 아래와 같습니다.

const readline = require("readline");

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

let input;

rl.on("line", (line) => {
  	input = line.split(' ').map((v) => parseInt(v));
	rl.close();
});

rl.on("close", () => {
  	console.log(input);
	process.exit();
});

line 이벤트는 입력값 한 줄을 문자열로 가져오기 때문에, 이를 split을 이용하여 배열로 변환한 후, 각 값을 숫자로 변경합니다. 이후 close 이벤트 콜백함수에서 console.log를 이용하여 input을 출력합니다.

이처럼 주어지는 입력값에 따라 코드를 작성하여 입출력 처리를 할 수 있습니다.


Node.js

우선 JavaScriptC/C++, Java와 같은 프로그래밍 언어이지만, 독립적인 언어가 아닌 스크립트 언어의 성격을 가지고 있습니다. JavaScript는 웹 브라우저에서 동작할 수 있습니다. 하지만 Node.js를 이용하면 브라우저 없이도 JavaScript를 실행할 수 있습니다.

Node.js란?

Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.

Node.js 공식 사이트에서 Node.js를 위와 같이 설명하고 있습니다. 여기서 런타임이 무엇일까요?

[ 런타임 - runtime ]

  • 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 의미합니다.

런타임의 개념과 JavaScript 엔진에 대해서는 이후에 더 자세히 알아보겠습니다. 지금은 간단하게 이해하고 넘어갑시다.

즉, 다시 말하자면 Node.jsJavaScript 프로그램을 실행할 수 있도록 하는 하나의 환경이라고 할 수 있습니다. 이러한 Node.js를 이용하여 vscode에서 JavaScript 코드를 실행시킬 수 있습니다.


Node.js로 JavaScript 파일 실행하기

우선 상단 링크를 통해 Node.js를 설치합니다. 설치가 잘 진행되었는지 확인하기 위해서 terminal 혹은 cmd에서 아래 명령어를 입력하여 버전을 확인합니다.

node -v

이후, 실행하고자 하는 JavaScript 파일 위치로 이동하여 아래 명령어를 이용하여 JavaScript 파일을 실행합니다.

node 파일이름.js

참고

profile
festina lenta

1개의 댓글

comment-user-thumbnail
2024년 4월 17일

오 잘보고 갑니다 ㅎㅎ

답글 달기