[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฌธ์ž์—ด ์ถœ๋ ฅํ•˜๊ธฐ JavaScript (feat. readline์‚ฌ์šฉ๋ฒ•)

2023. 7. 21. 19:58ใ†Study_Develop/์•Œ๊ณ ๋ฆฌ์ฆ˜ | ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

๋ฐ˜์‘ํ˜•

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฌธ์ž์—ด ์ถœ๋ ฅํ•˜๊ธฐ JavaScript (feat. readline์‚ฌ์šฉ๋ฒ•)

 

๋ฌธ์ œ>

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•>

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

let input = [];

rl.on('line', function (line) {
    input = [line];
}).on('close',function(){
    str = input[0];
    console.log(str);
});

ํ•ด์„ค >

readline๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜์†”์—์„œ ์ž…๋ ฅ์„ ์ฝ๊ณ , 

๋‹ค์‹œ ์ถœ๋ ฅํ•˜๋Š” js์ฝ”๋“œ

 

1. rl.on('line', function (line) { ... } ์ด ๋ถ€๋ถ„์€ line์ด๋ฒคํŠธ์— ๋Œ€ํ•œ 

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜์†”์— ์ƒˆ๋กœ์šด ์ž…๋ ฅ ์ค„์„ 

์ž…๋ ฅํ•  ๋•Œ ๋งˆ๋‹ค ์ œ๊ณต๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

2. input = [line]; : ์ƒˆ๋กœ์šด ์ค„์ด ์ž…๋ ฅ๋  ๋•Œ, ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์ž…๋ ฅ์„

input ๋ฐฐ์—ด์— ํ• ๋‹น ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ•˜๋‚˜์˜ ์ž…๋ ฅ ์ค„๋งŒ ์ €์žฅ

 

3. on('close', function() {...} : ์ด ๋ถ€๋ถ„์€ 'close'์ด๋ฒคํŠธ์— ๋Œ€ํ•œ

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ค์ •ํ•œ๋‹ค. readline์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ซํž ๋•Œ

์ œ๊ณต๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

4. str=input[0] : close์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ฝ”๋“œ๋Š” input ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ

์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ str๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ๋‹ค.

 

5. console.log(str) : ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ฝ”๋“œ๋Š” str๋ณ€์ˆ˜์˜ ๊ฐ’์„

์ฝ˜์†”์— ๊ธฐ๋กํ•œ๋‹ค.

 

 

โ“readline?

 

Readable stream ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ํ•œ ์ค„์”ฉ ์ฝ๊ธฐ ์œ„ํ•œ

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

readline ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜จ ํ›„ input, output์„ ํ†ตํ•ด์„œ

์ฝ˜์†”์— ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๋Š” ์ค„๊ณผ 

๊ฒฐ๊ณผ ๊ฐ’์„ ๋‚ด๋†“๋Š” ์ค„์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ“readline ์‚ฌ์šฉ๋ฒ•

 

1. ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

 

const readline = require('readline')

 

2. interface ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

 

interface ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฝ˜์†”์—์„œ ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

stdin๊ณผ stdout์— ๋Œ€ํ•œ ์งง์€ ์„ค๋ช…์„ ํ•˜์ž๋ฉด,

standard input๊ณผ standard output์˜ ์•ฝ์ž์ด๋‹ค.

 

3. ์ž…์ถœ๋ ฅ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

 

rl.on('line', (line) => {
  // ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ //
  rl. close();
});
  
rl.on('close', () => {
  // ์ž…๋ ฅ์ด ๋๋‚˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ //
  process.exit();
});

 

- on()๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ์™€ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ

 

- 'line' ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ ํ•œ ์ค„์”ฉ ์ฝ์–ด 

๋ฌธ์ž์—ด ํƒ€์ž…์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ด๋ฒคํŠธ

 

- rl.close()์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ข…๋ฃŒ, ๋ฌดํ•œํžˆ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

๊ทธ ํ›„, ๋‹ค์‹œ ์ด๋ฒคํŠธ๋กœ close๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ž…๋ ฅ์ด ๋๋‚œ ํ›„

์‹คํ–‰๋˜์–ด์•ผ ํ•  ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.