지금까지 프로그래머스 문제를 풀이하면서 단순히 solution
함수를 완성하는 것으로 문제를 해결해왔기 때문에 JavaScript
에서의 입출력은 어떻게 처리하는가에 대해 생각해본 적이 없습니다.
백준에서 문제를 풀이하거나 vscode에서 코드를 작성하여 결과를 확인해보기 위해서는 이러한 입출력을 어떻게 처리하는지에 대해 알고 넘어갈 필요가 있다고 생각하여 이번 포스팅을 진행하게 되었습니다.
이번 포스팅은 JavaScript
에서의 입출력 처리에 대해 정리하는 것을 목표로 하고 있습니다. 또한, Node.js
를 사용하여 vscode
에서 JavaScript
를 실행해보는 과정을 담고 있습니다. 간혹 lv 0
문제에서 보았던 readline
이 어떤 것인지 알고 넘어갈 수 있는 계기가 되었으면 좋겠습니다.
Readable Stream
에서 한 번에 한 줄 씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈
조금 더 쉽게 이해하자면 데이터를 읽기 위해 인터페이스를 제공해주는 모듈이라고 할 수 있습니다. 이를 이용해서 간단한 readline
사용법에 대해 알아보겠습니다.
readline
모듈을 사용하는 방법을 정리하자면 아래와 같습니다.
const readline = require("readline");
require
메서드를 이용하여 외부 모듈인 readline
을 가져옵니다.
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
readline
의 createInterface
메서드를 이용하여 readline.Interface
인스턴스를 생성합니다. input
과 output
을 지정해주게 되는데, 여기서 process.stdin
과 process.stdout
은 각각 아래와 같습니다.
process.stdin
: standard input에 대한 Readable Streamprocess.stdout
: standard output에 대한 Writable Stream[ 틈새 지식 - stream이란? ]
- 일련의 연속성을 갖는 흐름을 뜻합니다. 여기서의 stream은 데이터, 파일의 흐름, 다시 말해 컴퓨터 프로그램과 환경 사이에 미리 연결된 입출력 통로라고 이해할 수 있겠습니다.
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
을 출력합니다.
이처럼 주어지는 입력값에 따라 코드를 작성하여 입출력 처리를 할 수 있습니다.
우선 JavaScript
는 C/C++
, Java
와 같은 프로그래밍 언어이지만, 독립적인 언어가 아닌 스크립트 언어의 성격을 가지고 있습니다. JavaScript
는 웹 브라우저에서 동작할 수 있습니다. 하지만 Node.js
를 이용하면 브라우저 없이도 JavaScript
를 실행할 수 있습니다.
Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.
Node.js
공식 사이트에서 Node.js
를 위와 같이 설명하고 있습니다. 여기서 런타임
이 무엇일까요?
[ 런타임 - runtime ]
- 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 의미합니다.
런타임의 개념과
JavaScript 엔진
에 대해서는 이후에 더 자세히 알아보겠습니다. 지금은 간단하게 이해하고 넘어갑시다.
즉, 다시 말하자면 Node.js
는 JavaScript
프로그램을 실행할 수 있도록 하는 하나의 환경이라고 할 수 있습니다. 이러한 Node.js
를 이용하여 vscode
에서 JavaScript
코드를 실행시킬 수 있습니다.
우선 상단 링크를 통해 Node.js
를 설치합니다. 설치가 잘 진행되었는지 확인하기 위해서 terminal
혹은 cmd
에서 아래 명령어를 입력하여 버전을 확인합니다.
node -v
이후, 실행하고자 하는 JavaScript
파일 위치로 이동하여 아래 명령어를 이용하여 JavaScript
파일을 실행합니다.
node 파일이름.js
오 잘보고 갑니다 ㅎㅎ