[JS] fs๋ชจ๋ (part-2)
๐ ์ด๋ ต๋ค~ ์คํ๋ฆฐํธ ๊ณผ์ ์ด์ง๋ง,, ํ ์คํธ์ผ์ด์ค์ ๊ตฌ๊ธ์ ์ฐธ๊ณ ํ๋ฉฐ ๋๋ค๊ฒจ ๋ณด์๋ค.. ๋๋์ ์ค๋๋ฐ ์ฌ์ ํ ์๋ฟ์ง๋ ์๋๋ค^^
01_callBack.js
const fs = require("fs");
const getDataFromFile = function (filePath, callback) {
// TODO: fs.readFile์ ์ด์ฉํด ์์ฑํฉ๋๋ค
fs.readFile(filePath, "utf8", (err, data) => {
err ? callback(err, null) : callback(null, data)
})
};
getDataFromFile('README.md', (err, data) => console.log(data));
module.exports = {
getDataFromFile
};
02_promiseConstructor.js
const fs = require("fs");
const getDataFromFilePromise = filePath => {
// TODO: Promise ๋ฐ fs.readFile์ ์ด์ฉํด ์์ฑํฉ๋๋ค.
return new Promise((resolve, reject) => {
fs.readFile(filePath, "utf8", (err, data) => {
err ? reject(err) : resolve(data)
})
})
};
getDataFromFilePromise('README.md').then(data => console.log(data));
module.exports = {
getDataFromFilePromise
};
03_basicChaining.js
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
// HINT: getDataFromFilePromise(user1Path) ๋ฐ getDataFromFilePromise(user2Path)๋ฅผ ์ด์ฉํด ์์ฑํฉ๋๋ค
const readAllUsersChaining = () => {
// TODO: ์ฌ๋ฌ๊ฐ์ Promise๋ฅผ then์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์์ฑํฉ๋๋ค
return getDataFromFilePromise(user1Path)
.then(user1 => {
return getDataFromFilePromise(user2Path)
.then(user2 => {
return `[${user1},${user2}]`
})
}).then(text => JSON.parse(text))
}
readAllUsersChaining();
module.exports = {
readAllUsersChaining
}
04_promiseAll.js
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
const readAllUsers = () => {
// TODO: Promise.all์ ์ด์ฉํด ์์ฑํฉ๋๋ค
let user1 = getDataFromFilePromise(user1Path)
let user2 = getDataFromFilePromise(user2Path)
return Promise.all([user1, user2]).then((value) => {
return value.map((data) => {
return JSON.parse(data)
})
})
}
readAllUsers()
module.exports = {
readAllUsers
}
05_asyncAwait.js
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
const readAllUsersAsyncAwait = async () => {
// TODO: async/await ํค์๋๋ฅผ ์ด์ฉํด ์์ฑํฉ๋๋ค
let arr = []
let user1 = await getDataFromFilePromise(user1Path)
let user2 = await getDataFromFilePromise(user2Path)
arr.push(JSON.parse(user1))
arr.push(JSON.parse(user2))
return arr
}
readAllUsersAsyncAwait();
module.exports = {
readAllUsersAsyncAwait
}
+์ถ๊ฐ์
JSON.parse(): JSON ๋ฌธ์์ด์ JavaScript ๊ฐ์ฒด๋ก ๋ณํ
JSON ๋ฌธ์์ด์ JavaScript ๊ฐ์ฒด๋ก ๋ณํํ ๋๋ JSON ๊ฐ์ฒด์ parse() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
parse() ๋ฉ์๋๋ JSON ๋ฌธ์์ด์ ์ธ์๋ก ๋ฐ๊ณ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก JavaScript ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
JSON.stringify(): JavaScript ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํ
์ญ์ผ๋ก JavaScript ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํํ ๋๋ JSON ๊ฐ์ฒด์ stringify() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. stringify() ๋ฉ์๋๋ JavaScript ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ๊ณ JSON ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
์ฐธ์กฐ →
JSON.parse()์ JSON.stringify()
Engineering Blog by Dale Seo
www.daleseo.com
# ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํธ์ถํ๊ธฐ, bind()
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ฅผ ํธ์ถ ํ ๊ฒฝ์ฐ
bind()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ฝ ์ด๋ค ํจ์๊ฐ ์์ ๋ ์ด ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด์ bind()๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด ๊ฒฝ์ฐ bind()๋ ์๋ก์ด ํจ์๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด () ์๊ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ๋ ์ฐจ์ด์ , ๋ค๋ฅธ ํน์ง์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ฆ, call(), apply()์ฒ๋ผ this๋ฅผ ์ง์ ํ ์๋ ์๊ณ ๋ํ ์ํ๋ ์ธ์๋ฅผ ์ ๋ฌํ ์๋ ์์ต๋๋ค.
์ด๋ฐ ์ด์ ๋ก bind()๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ผ ๊ฐ๋จํ ์ฌ์ฉ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
๐ Function.bind(thisArg, [arg1, arg2, ...])
thisArg // this๊ฐ ๊ฐ๋ฆฌํฌ ๊ฐ์ฒด๋ฅผ ์ง์
[arg1, arg2 ... ]// ํจ์์ ์ธ์๋ก ์ ๋ฌํ ๊ฐ
์ด๋ ์ฒซ ๋ฒ์งธ ์ธ์์ธ thisArg๋ ์ ํ์ต์ ์ผ๋ก ๊ฐ์ ์ ๋ฌํ์ง ์์๋ ๋๋ฉฐ null ๋ฑ์ ์ฌ์ฉํ ์๋ ์๋๋ค.
๊ทธ ๋ค์์ ํจ์์ ์ ๋ฌ ํ ์ธ์ ๊ฐ์ผ๋ก ๋ฐฐ์ด ํ์ ์ผ๋ก ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค.
์ด์ฒ๋ผ ์ธ์ ๊ฐ์ ๋ฐฐ์ด๋ก ์ ๋ฌํ๋ ๊ฒ์ apply() ์ ๋น์ทํฉ๋๋ค.
[์๊ฐํ ์ ] call(), apply()์์ ์ฐจ์ด์ ์?
๊ฑฐ์ ๋์ผํ๊ฒ ํ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ํจ์๋ฅผ ์คํํ์ง ์๊ณ ํจ์๋ฅผ ์์ฑํ ํ ๋ฐํํ๋ ์ ์์ call(), apply()์์ ์ฐจ์ด์ ์ ๋๋ค.
์ฐธ์กฐ →
์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ bind ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์ ๋ฉ์๋ ์ค ํ๋์ธ bind()์ ๋ํ์ฌ ์์๋ด ๋๋ค.
webisfree.com