JavaScript의 입출력
1. readline 모듈
readline은 따로 설치가 필요없는 내장 모듈이며, 한 번에 한 줄씩 읽음
모듈을 불러오기 위해서는 readline(모듈 이름)의 형태
# 모듈 불러오기
const readline = require("readline")
# 객체 만들기
const rl = readline.createTnterface( {
input: prodess.stdin,
output: process.stdout,
});
const는 선언한 변수가 상수임을 의미 값 변경 불가능
2. 메소드
1) on 메소드
이벤트 발생할 때, 실행할 동작을 지정
on(사용할 이벤트 명, 콜백함수)
rl.on("line", function(x) {
console.log(x)
}).on("close", function({
});
1-1) line 이벤트
사용자의 입력을 받기 위해 사용하는 입력 이벤트
입력 스트림에 줄바꿈을 나타내는 \n or \r or \r\n 제어 문자나 사용자가 Enter or Return을 누를 때 발생
1-2) close 이벤트
입력 끝나고 어떤 이벤트를 동작할지 지정
+ 메서드 체이닝(Method Chaining)
이름이 Chaining인 것가 연관되어, 연속적인 코드의 줄에서 개체의 메서드를 반복적으로 호출하는 것을 의미
위 코드에서 .on("close", ~)에 해당하는 부분
3. fs 모듈
const fs = require("fs");
const input=fs.readFileSync("ldevlstdin").toString()
버퍼라는 변환된 값을 바당와서 디코딩을 해줄 필요가 있음 -> toString() 사용
toString(인코딩 옵션)의 형태이며, default 값은 utf8
4. readline vs fs
readline은 한 줄씩 읽어보는 반면, fs는 파일을 한 번에 다 읽어옴
readline은 한 줄씩 읽기 때문에 close가 필요한 반면, fs는 close가 없음
상대적으로 fs의 코드의 길이가 더 짧음
5. readline 모듈 실습 문제
1. 여러 개를 입력 받고 개별 출력
구분자 쉼표를 기준으로 첫 줄에 여러 개의 숫자를 입력 받음
방법1) for 반복문으로 출력하기
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", function (line) {
input = line.split(',')
for (let i = 0; i < input.length; i++) {
console.log(input[i]);
}
rl.close();
}).on("close", function () {
});
방법2) forEach 활용하기
forEach는 arr.forEach(callback, thisArg)
- forEach는 callback()을 주어진 배열에 있는 각 요소에 대해 오름차순으로 한 번씩 실행
- callback은 (현재 처리할 요소, 처리할 요소의 인덱스, forEach()를 호출할 배열)을 매개변수로 받음
- thisArg는 callback()을 실행할 때 this로 사용할 값
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", function (line) {
input = line.split(',');
rl.close();
}).on("close", function () {
input.forEach(num => {
console.log(num)});
});
for vs forEach
for은 몇 번 실행하는지 정해져있지만, forEach는 값이 있는 만큼 실행
방법3) map 활용하기
- forEach와 유사
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", function (line) {
input = line.split(',');
rl.close();
}).on("close", function () {
input.map(num => {
console.log(num)});
});
forEach vs map
forEach: 배열 요소 각각에 대해 실행
map: 배열 내의 모든 요소 각각에 대해 주어진 함수를 호출한 결과를 모아 새로운 배열 반환
방법4) for of 활용하기
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", function (line) {
input = line.split(',');
rl.close();
}).on("close", function () {
for (const v of input) {
console.log(v)};
});
방법5) join 활용하기
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", function (line) {
input = line.split(',');
rl.close();
}).on("close", function () {
input = input.join('\n')
console.log(input);
});
6. readline을 fs로 변환하는 연습
1. 여러 개를 입력 받고 개별 출력
const input = require('fs').readFileSync('파일경로').toString().split(',').map(Number);
console.log(input.join('\n'));
.map(Number)는 배열 내의 값들을 숫자로 넣는다는 것
반응형
'IT Study > JavaScript' 카테고리의 다른 글
[JS] 중첩배열 1차원 배열로 만들기(reduce 메서드, 전개문법) (0) | 2023.08.31 |
---|---|
[JS] Object.values(), reduce(), find(), filter() 메서드 (0) | 2023.08.25 |
[JS] 전개문법(+배열 복사, rest 파라미터), Splice() 메서드 (0) | 2023.08.25 |
[JS] 🐰기록하고 보기 위한 '놓치기 쉬운 부분들' (match, 인스턴스, random, 원시값-객체)_엘리스2주차 (0) | 2023.08.24 |
[JS] New 생성자 (0) | 2023.08.23 |