2023. 8. 17. 11:46ใ0. TiL ( Today I Learned )
ํ ํ์ด (4์ธ 2์กฐ) : ์ซ์์ผ๊ตฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
์๋์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ํ ๊ณผ์ ๋ฅผ ๋ฐ์๋ค. '๊ฐ๋จํ'์ด๋ผ๊ณ ํ์ง๋ง, ์ ๊ฐ๋จํ์ง ์์ง..?
์ฝ๋๋ ๊ฑฐ์ ๋ค ๋ง๋ค์๋๋ฐ ๊ตฌํํ๋ ์ค๊ฐ์ค๊ฐ ๋ฌธ์ ๊ฐ ์กฐ๊ธ ์์ด์ ๋ง๋ฌด๋ฆฌ ๋จ๊ณ๋ค.
๊ฐ๋จํ ์ซ์์ผ๊ตฌ ํ๋ก๊ทธ๋จ์ JS๋ก ๋ง๋ค์ด๋ด ๋๋ค.
์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ์ฌ ํด๊ฒฐํฉ๋๋ค.
์ค๋ ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด์ ๊ณต๋ถํ๊ฒ ๋ ๋ช ๊ฐ์ง ๊ฒ๋ค์ TIL์ ์ ์ด๋์ผ๋ ค๊ณ ํ๋ค.
indexOf() ๋ฉ์๋
indexOf() ์ธ์คํด์ค์ ๋ฉ์๋๋ ๋ฐฐ์ด Array์์ ์ฃผ์ด์ง ์์๋ฅผ ์ฐพ์ ์ ์๋ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ฑฐ๋, ์์ผ๋ฉด -1์ ๋ฐํํฉ๋๋ค.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
Array.prototype.indexOf() - JavaScript | MDN
The indexOf() method of Array instances returns the first index at which a given element can be found in the array, or -1 if it is not present.
developer.mozilla.org
* ๋๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด์ indexOf ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฐฐ์ด์ ์ด๋ค ์ธ๋ฑ์ค์ ์๋์ง ํด๋น๊ฐ์ ํ์ธํ๊ณ ๊ทธ ๊ฐ์ด ์๋๋ฉด, -1 , ๋ง์ผ๋ฉด ๊ฐ์ ์ฆ๊ฐ์ํค๋ ์์ผ๋ก ์ฌ์ฉํ๋ค.
๋ฐฐ์ด์ ๋ฌด์์๋ก ์๋ ์ฝ๋
numbers.sort(() => Math.random(-0.5))
sort() ๋ฉ์๋๋ ๋ฐฐ์ด์ ์์๋ค์ ์ ๋ ฌํ๋ ๊ธฐ๋ฅ์์ผ๋ก numbers.sort()๋ผ๊ณ ํ๋ฉด, numbers ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
() => Math.random(-0.5)๋ ํ์ดํ ํจ์์ด๋ฉฐ ๋งค๊ฐ๋ณ์๊ฐ ์๊ณ , Math.random(-0.5)๋ผ๋ ํํ์์ ๋ฐํํ๊ณ Math.random(-0.5)๋ Math ๊ฐ์ฒด์ random() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ํํํ๋ ์์ด๋ค.
random() ๋ฉ์๋๋ 0 ์ด์ 1 ๋ฏธ๋ง์ ์์์ ์ค์๋ฅผ ๋ฐํํ๋ค.sort() ๋ฉ์๋์ ํ์ดํ ํจ์๋ฅผ ์ธ์๋ก ๋๊ธฐ๋ฉด,
๋ฐฐ์ด์ ์์๋ค์ ๋น๊ตํ๋ ๊ธฐ์ค์ด ๋ฉ๋๋ค. ํ์ดํ ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ด ์์ผ๋ฉด ์์ผ๋ก, ํฌ๋ฉด ๋ค๋ก ์ ๋ ฌ์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ ํ์ดํ ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ ์์์ ์ค์์ด๋ฏ๋ก, ๋ฐฐ์ด์ ์์๋ค์ ๋ฌด์์๋ก ์์ด๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ numbers.sort(() => Math.random(-0.5)) ๋ numbers ๋ฐฐ์ด์ ๋ฌด์์๋ก ์๋ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๋ค.
* ๊ตฌ๊ธ๋ง์ผ๋ก ํ์ธํด์ ์ป์ ์ฝ๋์ด๋, ์ผ๋ถ์์๋ ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค. ๊ธธ์ด์ง๋๋ผ๋ ์์ ์ธ์์ ์ฌ์ฉํด ๋ณด๋๋ก ํด์ผ๊ฒ ๋ค.
Readline
js readline์ JavaScript์์ ๋ช ๋ น์ค ์์ฉ ํ๋ก๊ทธ๋จ, ๋ํํ ํํ ๋ฆฌ์ผ ๋๋ CLI ๋๊ตฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋๊ตฌ. readline ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๋ช ๋ น์ค์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฝ๊ณ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
* Readline ์ฌ์ฉ๋ฒ์ ์ ๋ชฐ๋ผ์ ์กฐ๊ธ ํค๋งธ๋ค.. ์ฒ์์ Readline์ผ๋ก ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ค๊ฐ ์ ๋ฒ ๋ณต์กํ ๊ฒ ๊ฐ์์, prompt ํจ์๋ฅผ ์ฐ๋ฉด ๋ฐ๋ก ๋ถ๋ฌ์ฌ ์ ์๋ ๊ฒ ๊ฐ์์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. ์ฌ์ฉ๋ฒ์ ํ๋ฒ ์ตํ๋ณด๊ณ ์.. ๊ทธ๋๋ ํ๋ฒ ์จ๋ดค๋ค!
์ฐธ์กฐ ๋ธ๋ก๊ทธ : Node.js Readline() ๋ชจ๋ - GeeksforGeeks
์ฐธ๊ณ ๋ ๋งํ YOUTUBE URL : https://youtu.be/dKYNLjtTtXw
Readline ์ฌ์ฉํด ๋ณด๊ธฐ
1. require ํจ์๋ก readline์ ๋ถ๋ฌ์ค๊ธฐ.
const readline = require("readline");
2. readline.createlnterface() ๋ฉ์๋๋ก ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ( input / ouput ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค.)
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
* ์ฌ์ฉ์ ํ๋ฉด์ READLINE์ ๋ฉ์๋๊ฐ ์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋๋์ด์ง๋ค๋ ๊ฒ์ ์์๋ค.
๋ด๊ฐ ํ์ธํ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ question ๋ฉ์๋์๋๋ฐ, on์ด๋ผ๋ ๋ฉ์๋๋ ์์๋ค. ๊ทธ๋์ ๋ ๊ฐ๋ฅผ ๋น๊ตํด ๋ณด์๋ค.
question ๋ฉ์๋ : ์ฌ์ฉ์์ ์ง์ ์ ์ธ ์ ๋ ฅ์ ์์ฒญ
๋ ์ธํฐํ์ด์ค ๊ฐ์ฒด๊ฐ ์ฌ์ฉ์์๊ฒ ์ง๋ฌธ์ ์ถ๋ ฅํ๊ณ , ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์์ ์ฝ๋ฐฑ ํจ์์ ์ ๋ฌํ๋ ๋ฉ์๋.
์๋ฅผ ๋ค์ด, question(“What is your name?”, callback)์ "What is your name?"์ด๋ผ๋ ์ง๋ฌธ์ ์ถ๋ ฅ
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฆ์ callback ํจ์์ ์ ๋ฌํ๋ค. ์ด ๋ฉ์๋๋ ํ ๋ฒ์ ํ๋์ ์ง๋ฌธ๋ง ์ฒ๋ฆฌํ ์ ์๋ค.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question(" ์ซ์๋ฅผ ๊ณจ๋ผ์ฃผ์ธ์ ", (answer) => {
// 1, 2, 3, 4, 5
console.log(` ๋น์ ์ด ๊ณ ๋ฅธ ์ซ์ : ${1, 2, 3, 4, 5}`);
rl.close();
});
on ๋ฉ์๋ : on ๋ฉ์๋๋ ์คํธ๋ฆผ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ๋์
์ธํฐํ์ด์ค ๊ฐ์ฒด๊ฐ ํน์ ์ด๋ฒคํธ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํ์ฌ ํธ์ถํ๋ ๋ฉ์๋๋ค. ์๋ฅผ ๋ค์ด, on(“line”, callback)์ ์คํธ๋ฆผ์์ ํ ์ค์ ์ฝ์ ๋๋ง๋ค callback ํจ์๋ฅผ ์คํ์ํจ๋ค. ์ด ํจ์๋ ์ฌ๋ฌ ๋ฒ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
rl.on("line", function(line) {
// ๋ฌธ์์ด
// ์ฝ๋์์ฑ
});

์ด๋ฒ์ฃผ.. ๋ฐ์ด๋ ์๋ค..
๊ฒฌ๋.. ์ด๊ฒจ๋ด..!
ํ ์์ด ์จ...