[ TIL ] [ ์ •๊ทœ๊ณผ์ • : ์‹ค์ „ํ”„๋กœ์ ํŠธ์ฃผ์ฐจ ] ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ 1. Hoisting, async/await, Arrow Function

2023. 10. 12. 19:39ใ†0. TiL ( Today I Learned )

Q1. Hoisting์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜ ์„ ์–ธ์ด ๊ทธ๋“ค์˜ ์Šค์ฝ”ํ”„ ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ๋™์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ž‘์€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

(๋‚˜๋Š” ์ฒ˜์Œ, ํ˜ธ์ŠคํŒ…์œผ๋กœ ๊ณต๋ถ€ํ•ด๋ฒ„๋ ธ๋‹ค... ํ˜ธ์ด์ŠคํŒ…์ด๋ผ๋Š”๊ฑธ ๋‹ค์‹œ ํ™•์ธํ–ˆ๊ณ , ์•„๋ž˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•ด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค.)

 

https://tecoble.techcourse.co.kr/post/2021-04-25-hoisting/

 

ํ˜ธ์ด์ŠคํŒ…์— ๋Œ€ํ•œ ์˜คํ•ด์™€ ์ง„์‹ค

tecoble.techcourse.co.kr


Q2. async/await ์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?


async์™€ await๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‚˜์˜จ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ํ”„๋กœ๋ฏธ์Šค์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.  

1) async ํ‚ค์›Œ๋“œ๋Š” function ์•ž์— ์‚ฌ์šฉํ•œ๋‹ค. function ์•ž์— async๋ฅผ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋”๋ผ๋„ ์ดํ–‰ ์ƒํƒœ์˜ ํ”„๋ผ๋ฏธ์Šค(resolved promise)๋กœ ๊ฐ’์„ ๊ฐ์‹ธ ์ดํ–‰๋œ ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ๋ฐ˜ํ™˜๋˜๋„๋ก ํ•œ๋‹ค.

2) await: await ํ‚ค์›Œ๋“œ๋Š” async ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. await๋Š” Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค. Promise๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

์ฐธ๊ณ  URL : https://joshua1988.github.io/web-development/javascript/js-async-await/

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ async์™€ await

(์ค‘๊ธ‰) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ async, await ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…. ์‰ฝ๊ฒŒ ์•Œ์•„๋ณด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ async await ๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ•, ์˜ˆ์ œ ์ฝ”๋“œ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

joshua1988.github.io

์ฐธ๊ณ  URL : https://velog.io/@khy226/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0%EB%9E%80-Promise-asyncawait-%EA%B0%9C%EB%85%90

 

๋™๊ธฐ, ๋น„๋™๊ธฐ๋ž€? (+Promise, async/await ๊ฐœ๋…)

1. ๋™๊ธฐ vs. ๋น„๋™๊ธฐ ์šฐ์„  ์ฐจ์ด์  ๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜์ž๋ฉด, ๋™๊ธฐ๋Š” '์ง๋ ฌ์ '์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ  ๋น„๋™๊ธฐ๋Š” '๋ณ‘๋ ฌ์ '์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ๋น„๋™๊ธฐ๋ž€ ํŠน์ • ์ฝ”๋“œ๊ฐ€ ๋๋‚ ๋•Œ ๊นŒ์ง€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”

velog.io

 


 

Q3. Arrow Function ์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

 

ES6 ๋ฌธ๋ฒ• ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ด ์ƒˆ๋กญ๊ฒŒ ํ•˜๋‚˜ ๋“ฑ์žฅํ–ˆ๋‹ค.
arrow function ์ด๋ผ๋Š” ๋ฌธ๋ฒ•์ธ๋ฐ ์ด๊ฑธ ์ด์šฉํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

function์ด๋ผ๋Š” ๊ธธ๊ณ  ๋ณต์žกํ•œ ํ‚ค์›Œ๋“œ ๋Œ€์‹ ์—
=> ์ด๋Ÿฐ ์˜ˆ์œ ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์‹ ๋ฌธ์ด๋‹ค.

1) ํ•จ์ˆ˜ ๋ณธ์—ฐ์˜ ๊ธฐ๋Šฅ์„ ์•„์ฃผ ์ž˜ ํ‘œํ˜„ํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋‹ค.
 
๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ function ๋ฌธ๋ฒ•์€ ์™œ ์‚ฌ์šฉํ• ๊นŒ? 
1. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ ๋‹จ์–ด๋กœ ๋ฌถ๊ณ  ์‹ถ์„ ๋•Œ (๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— ์žฌ์‚ฌ์šฉํ•  ๋•Œ)
2. ์ž…์ถœ๋ ฅ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ๋•Œ 
์ด๋Ÿด ๋•Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

arrow function์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ๋ณธ์—ฐ์˜ ์ž…์ถœ๋ ฅ๊ธฐ๋Šฅ์„ ์•„์ฃผ ์ง๊ด€์ ์œผ๋กœ ์ž˜ ํ‘œํ˜„ํ•ด์ค€๋‹ค.

arrow function์„ ์“ฐ์‹œ๋ฉด ์ž…์ถœ๋ ฅ๊ธฐ๋Šฅ์ด ์‰ฝ๊ณ  ์˜ˆ์˜๊ฒŒ ํ‘œํ˜„๋œ๋‹ค.

var ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ = (x) => { return x * 2 }

console.log( ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ(4) );
console.log( ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ(8) );


์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด 2๋ฐฐ๋ฅผ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด, ๋งค์šฐ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

2) ์†Œ๊ด„ํ˜ธ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ์†Œ๊ด„ํ˜ธ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

var ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ = x => { return x * 2 }

console.log( ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ(4) );
console.log( ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ(8) );

 

x์— ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค.

3) ์ค‘๊ด„ํ˜ธ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

์ค‘๊ด„ํ˜ธ ์•ˆ์— return ํ•œ์ค„ ๋ฟ์ด๋ผ๋ฉด ์ค‘๊ด„ํ˜ธ์™€ return๋„ ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค. 

var ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ = x => x * 2 ;

console.log( ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ(4) );
console.log( ๋‘๋ฐฐ๋งŒ๋“ค๊ธฐ(8) );


๊ฒฐ๋ก : x๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š” ํ•จ์ˆ˜์ธ์ง€ ์ž…์ถœ๋ ฅ๊ธฐ๋Šฅ์ด ๋ฐ”๋กœ ํ•œ๋ˆˆ์— ๋“ค์–ด์˜จ๋‹ค.


4) this ๋ฐ”์ธ๋”ฉ :  arrow function์€ ์–ด๋””์„œ ์“ฐ๋“ ๊ฐ„์— ๋‚ด๋ถ€์˜ this ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. 
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ฐ”๊นฅ์— ์žˆ๋˜ this์˜ ์˜๋ฏธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‚ด๋ถ€์—์„œ๋„ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ arrow function ์ด๋ผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 
(*ํ•ญ์ƒ ์žฅ์ ์€ ์•„๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ˆ์ธกํ•˜๋˜ this๊ฐ’๊ณผ ๋‹ฌ๋ผ์งˆ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๋‹จ์ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.  )


 

์ฐธ๊ณ  URL : https://codingapple.com/unit/es6-3-arrow-function-why/

 

Arrow function์€ function์„ ๋Œ€์ฒดํ•˜๋Š” ์‹ ๋ฌธ๋ฒ•์ด ์•„๋‹˜ - ์ฝ”๋”ฉ์• ํ”Œ ์˜จ๋ผ์ธ ๊ฐ•์ขŒ

0:00 Arrow function ๋ฌธ๋ฒ• 1:17 ์™œ ์“ฐ๋Š”์ง€ ์žฅ์  3๊ฐœ ์ •๋ฆฌ 4:28 Arrow function ์‹ค์ƒํ™œ ์‚ฌ์šฉ ์˜ˆ์‹œ & this๊ฐ’์— ๋Œ€ํ•˜์—ฌ ES6 ๋ฌธ๋ฒ• ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ด ์ƒˆ๋กญ๊ฒŒ ํ•˜๋‚˜ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ

codingapple.com


 

์˜ค๋Š˜๋ถ€ํ„ฐ ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. 

ํ•˜๋ฃจ์— 2๊ฐœ์ •๋„ ๋‚ด๊ฐ€ ์•Œ์•„๋ณธ ๋‚ด์šฉ๋“ค์„ ์ œ์ถœํ–ˆ๊ณ , 

์˜ค๋Š˜์€ ๋‚ด๊ฐ€ ๋ฏธ๋ฆฌ ๋‚ด๊ฐ€ ๊ธฐ์กด์— ์•Œ์•„๋ณธ ๋‚ด์šฉ๋“ค๋กœ ๋กคํ”Œ๋ ˆ์ž‰๋„ ์ง„ํ–‰ํ–ฌ๋ณด์•˜๋Š”๋ฐ, ๊ฑฑ์ •์ด๋‹ค..! 

๋‚˜ ๋‚˜์ค‘์—.. ๊ธฐ์ˆ ๋ฉด์ ‘ ์ž˜ ๋ณผ์ˆ˜์žˆ๊ฒ ์ง€? 

๋ฒŒ์จ ๊ฑฑ์ •์ด๋‹ค! 

์•„์ง ์ „๋ฌธ์ง€์‹์ด ๋ถ€์กฑํ•ด์„œ ๊ผฌ๋ฆฌ์งˆ๋ฌธ ๋‚˜์˜ค๋ฉด ๊ธด์žฅ๋ถ€ํ„ฐ ๋œ๋‹ค!

๋งŽ์ด ๋ฐฐ์›Œ์•ผ๊ฒ ๋‹ค!