티스토리 뷰

프로그래머스 Lv. 0의 문제를 풀다 처음 접하는 모듈이 있어서 정리해보려한다. readline 모듈은 콘솔을 통해 입력값을 받고 한 줄씩 처리할 수 있게 해주는 모듈이다. 아래의 코드는 문제에 답으로 제출한 코드인데 이를 들여다 보며 모듈이 어떤 방식으로 동작하는지 알아보자

 

const readline = require('readline');  // 모듈 import
const rl = readline.createInterface({  // interface 객체 생성
    input: process.stdin,
    output: process.stdout
});

let N;                                 // 입/출력에서 사용될 변수 선언

rl.on('line', function (line) {        // 입/출력 처리 (입력부)
    N = Number(line);
    rl.close();
}).on('close', function () {           // 입/출력 처리 (출력부)
    for (let i = 1; i<=N; i++) {
        console.log('*'.repeat(i))
    }
});

 

모듈 불러오기

const readline = require('readline');

 

interface 객체 생성

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

 

인터페이스 객체 rl을 통한 입출력 처리

rl.on('line', function (line) {     

    rl.close();
});

 

콘솔으로 부터 입력은 첫번째 인자를 'line'으로 전달함으로서 이루어진다. 이 이벤트는 한줄씩 입력을 받으며 입력받은 한 줄의 데이터는 line변수에 저장되어 callback 함수에 전달된다. rl.close()를 명시하지 않을 경우 무한하게 입력이 이루어지므로 주의해야한다.(의도적으로 명시하지 않음으로서 여러줄을 입력받는 것도 가능하다.)

 

rl.on('close', () => {

    process.exit();
})

 

 

출력은 첫번째 인자를 'close'로 전달하여 실행된다. 앞서 입력의 경우에서 close() 함수가 호출되었을 때 실행된다. 보통 맨 위의 예시 코드에서와 같이 입력의 callback에서 데이터를 처리하고, 출력에서 의도한 대로 결과물을 출력한다.