JS

JS, readline 모듈을 이용해 입력값 받기

Hyeon_E 2023. 6. 15. 22:34

[ readline ]

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

즉 입출력을 한줄씩 처리하는 모듈이라고 생각하면 됨

 

[ 기본 사용법 ]

▶ readline 모듈 불러오기

const readline = require("redaline");
  • require 메서드
    • 다른 파일이나 모듈을 불러오는 함수
  • readline 모듈
    • Node.js의 내장모듈
    • 사용자의 input을 받는 인터페이스 제공

▶ 인터페이스 생성하기

const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});
  • process.stdin , process.stdout
    • ‘process’ 객체 : 현재 실행 중인 프로세스에 관한 정보와 제어 기능 제공
    • 사용자한테 입력받아 출력을 보여주고 싶으면 이것을 사용하면 됨
    • ‘stdin’ (standard input) : 사용자의 input을 받는 데 사용
    • ‘stdout’ (standard output) : 프로세스의 출력을 화면에 표시
  • readline.createInterface
    • ‘readline.Interface’ 객체를 생성
      • 이벤트 기반의 API를 제공해, 비동기적으로 사용자의 입력을 처리할 수 있음
      • 이벤트는 사용자 입력을 기반으로 발생하므로, 이벤트의 콜백 함수를 사용해 사용자 입력을 처리할 수 있음
    • 객체를 인자로 받아, input에는 입력한 값을, output에는 출력 값을 지정
      • input(process.stdin) ,output( process.stdout)
  • rl
    • ‘readline.createInterface’ 가 반환하는 ‘readline.Interface’ 객체를 변수에 저장한 것
    • 즉 rl은 readline.Interface가 제공하는 여러가지 메서드와 이벤트를 가지고 있게 됨

▶ 입출력을 처리하는 코드 작성

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

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

 

  • rl.on(): 인터페이스가 가지는 on()메서드를 사용해 이벤트와 콜백함수를 전달함
  • “line”: 입력받는 값을 한 줄씩 읽어 문자열 타입으로 전달하는 역할 하는 이벤트
  • /입력 받는 값을 처리하는 코드*/: "line" 이벤트로 받은 내용을 적절하게 처리하는 코드
  • rl.close(): 인터페이스를 종료함으로써 무한히 입력받는 것을 방지함
    • rl.close()가 호출되면 입력이 끝났다는 것이고, 다음에 "close"이벤트를 발생시켜 입력값을 활용하여 출력값을 도출하는 코드를 작성하게 됨
  • "close": 더이상 입력되는 값이 없을 때 실행되는 이벤트
  • /*입력이 끝나고 실행할 코드*/: 입력이 종료되었음을 알리는 "close"이벤트가 호출된 다음 입력값을 활용해 출력값을 도출하는 코드를 작성함
  • process.exit(): 프로세스를 종료시킴

 

[ readline의 대표적인 메서드 ]

  • question(query, callback): 질문을 출력하고 사용자의 입력을 받음
    • query는 출력할 질문을 나타내는 문자열이며, callback은 사용자의 입력을 처리하는 콜백 함수
  • pause(): Interface의 입력을 일시 정지
    • 입력 이벤트(line)를 받지 않음
  • resume(): Interface의 입력을 재개함
    • 입력 이벤트(line)를 다시 받음
  • close(): Interface를 닫고 프로그램 실행을 종료
  • on(eventName, callback): readline.Interface 객체에서 이벤트를 처리하기 위해 사용되는 메서드
    • evenName: 처리할 이벤트의 이름을 나타내는 문자열
      • line, close, pause, resume 등의 이벤트 이름을 사용할 수 있음
    • callback: 이벤트가 발생했을때 실행할 콜백함수, 콜백 함수는 이벤트와 관련된 정보를 전달받을 수 있음