아래와 같이 입력을 받기 위한 readline 모듈을 불러오고,
readline 모듈을 이용해 입출력을 위한 인터페이스 객체를 생성하여 입력과 출력을 처리할 수 있도록 하였다.
해당 객체를 이용하여 콘솔에서 입력을 받아올 수 있다.
node.js 공식 문서에 따르면 readline 모듈 활용 방식은 다음과 같다.
// readline 모듈 불러오기
const readline = require('node:readline');
// 입출력 인터페이스 객체 생성하기
const { stdin: input, stdout: output } = require('node:process');
const rl = readline.createInterface({ input, output });
// 입력 받기
rl.question('What do you think of Node.js? ', (answer) => {
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close(); // 사용이 끝나면 입출력 닫아주기
});
일반적으로는 아래 코드처럼 readline 모듈과 입출력 인터페이스를 생성하는 예시가 많은 것 같다.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
사용 방식을 찾아보니 너무 다양해서 오히려 헷갈렸는데, 찾아보니 그냥 모듈을 불러오고 활용하는 작성 방식이 다른 것이라고 한다.
두번째 코드가 더 직관적으로 이해하기 편리하여 더 많이 사용되는 것 같다.
하지만!
readline 모듈을 통해 입력을 받는 함수를 작성한 후에, 해당 함수를 호출하여 입력을 진행하였다. 그리고 입력값을 출력하려고 하니 제대로 출력되지 않았다...
입력을 받는 함수가 종료되면 입력 받는 함수가 실행되지 않고 종료되는 것 같았다.
readline 모듈이 비동기 방식으로 진행되기 때문이라고 한다.
즉, readline 모듈은 비동기 방식으로 작동하기 때문에, 입력을 진행하는 작업이 전부 진행되지 않아도 메인 함수가 진행되어 끝나면
전체 프로그램 자체가 종료되는 방식으로 프로그램이 동작하고 있었던 것이다.
이런 비동기 방식을 지원하기 위해서 사용할 수 있는 함수들이 javascript에 존재한다고 한다.
비동기로 진행되는 동작을 완료하면 알려주는 역할을 한다
+) readlinePromises.Interface 가 있던데 이거에 대해서도 더 찾아봐야 겠다.
ref
자스는 입출력이 너무 그지같아용. 우리 같이 행복 C++ 해용.