콘솔로 값 입력 받기 Node.js Readline to get value from console

sunghoon·2025년 3월 20일
0

2.0 Glove Project

목록 보기
24/35

입력 한개 받기

const readline = require('readline');

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

rl.question('query:string', (data) => {
    // 입력값에 대한 처리

    console.log(data);

    
    rl.close()
});

입력 2개 받기

const readline = require('readline');

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

let a, b;

rl.question('첫 번째 값을 입력하세요: ', (data1) => {
    a = Number(data1); // 첫 번째 입력 값을 숫자로 변환

    rl.question('두 번째 값을 입력하세요: ', (data2) => {
        b = Number(data2); // 두 번째 입력 값을 숫자로 변환

        console.log(`입력한 값: ${a}, ${b}`);

        rl.close(); // 입력 종료
    });
});

3개 받기(배열 / 재귀함수)

const readline = require('readline');

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

const inputs = [];
const questions = ['첫 번째 값을 입력하세요: ', '두 번째 값을 입력하세요: ', '세 번째 값을 입력하세요: '];

const askQuestion = (index) => {
    if (index === questions.length) {
        console.log(`입력한 값: ${inputs.join(', ')}`);
        rl.close();
        return;
    }

    rl.question(questions[index], (data) => {
        inputs.push(Number(data)); // 입력값을 숫자로 변환 후 저장
        askQuestion(index + 1); // 다음 질문 실행
    });
};

askQuestion(0); // 첫 번째 질문부터 시작

조건에 값에 맞는 입력받기

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

const askQuestion = () => {
    rl.question('입력하세요: ', answer => {
        if (/* 입력 조건 검사 */ false) {
            console.log('조건에 맞지 않아요. 다시 입력하세요.');
            askQuestion(); // 재귀 호출
        } else {
            console.log(`입력값: ${answer}`);
            rl.close(); // 입력이 유효하면 종료
        }
    });
};

askQuestion(); // 최초 호출

코드설명

1. readline 모듈 불러오기

js
CopyEdit
const readline = require('readline');
  • Node.js의 내장 모듈인 readline을 가져옴.
  • 이 모듈은 터미널에서 입력을 받을 수 있도록 도와줌.

2. readline.createInterface()를 사용하여 인터페이스 생성

js
CopyEdit
const rl = readline.createInterface({
	input : process.stdin,
	output : process.stdout,
});
  • readline.createInterface()를 호출하여 rl이라는 인터페이스 객체를 생성.
  • input: process.stdin: 표준 입력(키보드 입력)을 받음.
  • output: process.stdout: 표준 출력(터미널에 출력)을 사용함.

3. rl.question()을 사용하여 사용자 입력 받기

js
CopyEdit
rl.question('query:string', (data) => {
    // 입력값에 대한 처리

    console.log(data);

    rl.close();
});
  • rl.question(prompt, callback) 형태로 사용.
  • 'query:string' → 사용자에게 보여줄 질문.
  • (data) => { ... } → 사용자가 입력한 값이 data에 저장되고 콜백 함수 내부에서 처리됨.
  • console.log(data); → 입력받은 값을 터미널에 출력.
  • rl.close(); → 입력을 완료한 후 readline 인터페이스를 닫음.

실행 흐름 예시

  1. 실행하면 query:string이 콘솔에 표시됨.
  2. 사용자가 입력하고 Enter를 누르면, 입력한 값이 data에 저장됨.
  3. 입력한 값이 console.log(data);를 통해 출력됨.
  4. rl.close();가 실행되면서 입력 인터페이스가 종료됨.

실행 예시

$ node script.js
query:string hello
hello
  • query:string이 먼저 출력됨.
  • hello를 입력하면 hello가 출력됨.
  • 이후 입력 대기 상태가 종료됨.

추가 개념

rl.close()를 사용해야 하는 이유

  • rl.createInterface()는 입력을 지속적으로 받을 수 있도록 process.stdin을 유지함.
  • rl.close()를 호출하지 않으면 프로그램이 종료되지 않고 계속 대기 상태가 됨.

rl.on('line', callback)을 사용한 여러 줄 입력

rl.question()은 한 번 입력을 받으면 종료되지만, 여러 줄을 받을 때는 rl.on('line', callback)을 사용할 수 있음.

js
CopyEdit
const readline = require('readline');

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

rl.on('line', (data) => {
    console.log(`입력한 값: ${data}`);
});
  • 여러 줄 입력을 받을 수 있고, Ctrl + C 또는 process.exit(0);을 호출해야 종료됨.
profile
프라다 신은 빈지노와 쿠페를 타는 꿈을 꿨다.

0개의 댓글