[๊ธฐ์ˆ  ๋ฉด์ ‘] ๐Ÿ“’ JavaScript

pyeonneยท2022๋…„ 6์›” 21์ผ
0
post-thumbnail

๐Ÿ“‹ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

๐Ÿ“Œ ์ฝœ๋ฐฑ ์ง€์˜ฅ (Callback hell)

  • ๋น„๋™๊ธฐ ๋กœ์ง ์ฒ˜๋ฆฌ ์ค‘ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์—ฐ์†ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์•ˆ์— ๋˜ ๋‹ค์‹œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋ฐ˜๋ณต๋˜๋ฉด์„œ ์ฝ”๋“œ์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๋ณด๊ธฐ ํž˜๋“  ์ˆ˜์ค€๊นŒ์ง€ ๊ฐ„ ์ƒํ™ฉ
  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋Š” ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•จ

๋ฌธ์ œ์ 

  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋–จ์–ด์ง
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ณต์žก๋„ ์ฆ๊ฐ€

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

  • ES6 ๋ฌธ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ Promise๋ฅผ ์‚ฌ์šฉ
  • ๋ณดํ†ต async/await ๋ฌธ๋ฒ• ์‚ฌ์šฉ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, Promise ๋ฌธ๋ฒ•์˜ ๊ฒฝ์šฐ then ์•ˆ์— Promise ํ˜ธ์ถœ ์‹œ ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ Promise VS async/await

  • ๊ณตํ†ต์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•๋“ค
  • resolve์™€ recject ํ‚ค์›Œ๋“œ๋กœ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ ๋ฐ›์Œ

Promise

  • ES6์—์„œ ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•
  • 3๊ฐ€์ง€ ์ƒํƒœ
    • Pending - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์™„๋ฃŒ ์ „
    • Fulfilled - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์™„๋ฃŒ
    • Rejected - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์‹คํŒจ

async/await

  • ES8์—์„œ ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•
  • Promise๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋‚˜์˜ด
  • await ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฐ›์Œ
  • ๋‹จ์ ์œผ๋กœ๋Š” ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— try/catch๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•จ

๐Ÿ“Œ ํด๋กœ์ ธ(Closure)

  • ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋งฅ๋ฝ(context)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

์Šค์ฝ”ํ”„(Scope)

  • ๋ณ€์ˆ˜๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„
  • ์ „์—ญ ์Šค์ฝ”ํ”„(Global Scope) - ์–ด๋Š ๊ณณ์—์„œ๋“  ํ•ด๋‹น ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
  • ์ง€์—ญ ์Šค์ฝ”ํ”„(Local Scope) - ํ•ด๋‹น ์ง€์—ญ(ํ•จ์ˆ˜) ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ

ํด๋กœ์ €๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ๋ถˆํ•„์š”ํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ค„์—ฌ์„œ ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•จ

๐Ÿ“Œ var VS let VS const

  • ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹

var

  • ๋ณ€์ˆ˜์˜ ์ค‘๋ณต ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ์˜ค๋ฅ˜๋ฅผ ์ถ”์ ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง
  • ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์ทจ๊ธ‰
  • ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด let๊ณผ const๊ฐ€ ๋‚˜์˜ด

let

  • ๋ณ€์ˆ˜์˜ ์ค‘๋ณต ์„ ์–ธ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์žฌํ• ๋‹น์€ ๊ฐ€๋Šฅ

const

  • ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋™์‹œ์— ํ•ด์•ผํ•จ
  • ์žฌ์„ ์–ธ๊ณผ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅ
  • ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์›์‹œ ๊ฐ’์˜ ์žฌํ• ๋‹น์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ฐ์ฒด๋Š” ๊ฐ€๋Šฅ

๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋Š” ์ตœ๋Œ€ํ•œ ์ข๊ฒŒ ์„ ์–ธ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


๐Ÿ“Œ ๊นŠ์€ ๋ณต์‚ฌ VS ์–•์€ ๋ณต์‚ฌ

์–•์€ ๋ณต์‚ฌ (shallow copy)

  • ์ฐธ์กฐ์— ์˜ํ•œ ํ• ๋‹น
  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ ๊ฐ’(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ

๊นŠ์€ ๋ณต์‚ฌ(deep copy)

  • ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ˜•๋  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ์Œ
  • ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ 1depth๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๊ฐ์ฒด๋Š” ์–•์€ ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง

๐Ÿ“Œ ํ”„๋กœํ† ํƒ€์ž…(Prototype)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด
  • ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์—์„œ ์ƒ์†์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ž˜์Šค๋ผ๋Š” ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ.
  • ๊ทธ๋ž˜์„œ ํ”„๋กœํ†  ํƒ€์ž…์ด ํ•„์š”ํ•จ
  • ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ƒ์† ๊ฐœ๋…์„ ํ™œ์šฉํ•ด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ

๐Ÿ“Œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

  • ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ(MS)์—์„œ ๊ฐœ๋ฐœํ•œ ์–ธ์–ด
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด

์‚ฌ์šฉ ์ด์œ 

  • ์ •์  ํƒ€์ž…(๋ฏธ๋ฆฌ ํƒ€์ž…์„ ์ง€์ •)์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์น˜๋ช…์  ๋‹จ์ ์„ ๋ณด์™„ํ•จ
  • ํƒ€์ž…์ผ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
  • ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ES6+ ๋ฌธ๋ฒ•์„ ES5 ํ˜น์€ ES3๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ require() VS import()

  • ์™ธ๋ถ€ ํŒŒ์ผ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ์‚ฌ์šฉ

require()

const express = require('express');
  • ๋‚ด์žฅ Node.js ํ‚ค์›Œ๋“œ
  • ์ฝ”๋“œ์˜ ์–ด๋Š ์ง€์ ์—์„œ๋‚˜ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

import()

import express from 'express';
  • ES6 ๋ชจ๋“ˆ์—์„œ ๋„์ž…๋œ ํ‚ค์›Œ๋“œ
  • ์ฝ”๋“œ์˜ ๋งจ ์œ„๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ
  • from ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ ํ˜ธ์ด์ŠคํŒ…

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์„ ์–ธ ์ „์— ๋ฏธ๋ฆฌ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ -> ์ดˆ๊ธฐํ™” -> ํ• ๋‹น์„ ๊ฑฐ์ณ ์ƒ์„ฑ

var ํ‚ค์›Œ๋“œ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

var ๋ณ€์ˆ˜์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด
1. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋ฅผ ๋™์‹œ์— ์ง„ํ–‰
2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋ณ€์ˆ˜ ๊ฐ์ฒด๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ undefined๋ฅผ ๋งŒ๋“ฆ

๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์ „์— ํ˜ธ์ถœ์„ ํ•˜๋ฉด undefined๊ฐ€ ํ˜ธ์ถœ ๋จ


๐Ÿ“Œ TDZ(Temporal Dead Zone)

  • ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์˜ ์‚ฌ์ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ

let ํ‚ค์›Œ๋“œ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

let ๋ณ€์ˆ˜์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด
1. ์„ ์–ธ ๋‹จ๊ณ„์™€ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด์„œ ์ง„ํ–‰
2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋ณ€์ˆ˜๊ฐ€ ๋“ฑ๋ก๋œ ์ƒํƒœ์ด์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋˜์ง€ ์•Š์•„ ์ฐธ์กฐ ์—๋Ÿฌ(ReferenceError)๊ฐ€ ๋ฐœ์ƒ

์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋“ฑ๋ก๋จ (ํ˜ธ์ด์ŠคํŒ…)
-> TDZ ๊ตฌ๊ฐ„์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋˜์ง€ ์•Š์•„ ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ


๐Ÿ”— ์ฐธ๊ณ  ๋ž˜ํผ๋Ÿฐ์Šค

profile
๊ฑด๊ฐ•ํ•œ ๋ชธ๊ณผ ๋งˆ์Œ์—์„œ ๊ฑด๊ฐ•ํ•œ ์ฝ”๋“œ๊ฐ€ ํƒœ์–ด๋‚œ๋‹ค !

0๊ฐœ์˜ ๋Œ“๊ธ€