๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daily Front_Minhhk

[JS] fs๋ชจ๋“ˆ (part-2) ๋ณธ๋ฌธ

Code๊ฐœ๋ฐœ์ผ์ง€

[JS] fs๋ชจ๋“ˆ (part-2)

Minhhk 2022. 11. 25. 22:10

๐Ÿ“Œ ์–ด๋ ต๋‹ค~ ์Šคํ”„๋ฆฐํŠธ ๊ณผ์ œ์ด์ง€๋งŒ,, ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์™€ ๊ตฌ๊ธ€์„ ์ฐธ๊ณ  ํ•˜๋ฉฐ ๋‘๋“ค๊ฒจ ๋ณด์•˜๋‹ค.. ๋Š๋‚Œ์€ ์˜ค๋Š”๋ฐ ์—ฌ์ „ํžˆ ์™€๋‹ฟ์ง€๋Š” ์•Š๋Š”๋‹ค^^

 

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