๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Daily/Today I Learned

201230_TIL (๋น„๋™๊ธฐ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜)

by joooing 2020. 12. 30.
๋ฐ˜์‘ํ˜•

๐ŸŽ ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ


โœ”๏ธ ๋™๊ธฐ, ๋น„๋™๊ธฐ ๋ฐฉ์‹
๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ธฐ์— ์•ž์„œ, ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋จผ์ € ๋ฐฐ์› ๋‹ค. ๋™๊ธฐ(sync)๋Š” ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ฝ”๋“œ๋ถ€ํ„ฐ ์™„๋ฃŒํ•˜๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹, ๋น„๋™๊ธฐ(async)๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ์ง€์™€๋Š” ์ƒ๊ด€์—†์ด, ๋ฐ”๋กœ ๋‹ค์Œ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋” ๋‚˜์•„๊ฐ€์„œ๋Š” Timer API๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ๋ฐฐ์› ๋‹ค.

โœ”๏ธ callback ํ•จ์ˆ˜
์–ผ๋งˆ์ „์—๋„ callbackํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ธด ํ–ˆ์—ˆ๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ฌด๋ฆฌ๊ฐ€ ์—†์–ด์„œ ๊ทธ ๋•Œ๋Š” ๊ทธ๋ƒฅ ์ธ์ž๋กœ ์“ฐ์ด๋Š” ํ•จ์ˆ˜ ์ •๋„๋กœ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ”์—ˆ๋‹ค. ๊ทผ๋ฐ ๋น„๋™๊ธฐ ๋ฐฉ์‹๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋‹ˆ callbackํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ญ”๊ฐ€ ๋ง‰ํžˆ๋Š” ๋Š๋‚Œ์ด ๋“ค์–ด์„œ ๋‹ค์‹œ ์ฐพ์•„๋ดค๋‹ค. ์ „๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํด๋กœ์ €๋‚˜ ์Šค์ฝ”ํ”„๊ฐ™์€ ๊ฐœ๋…๋„ ๋ฐฐ์›Œ์„œ, ์–ด๋–ค์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š”์ง€ ๊ทธ๋•Œ๋ณด๋‹จ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ด ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ์‚ฌ๋žŒํ•œํ…Œ๋„ ์„ค๋ช…ํ•ด์ค„ ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๋” ์ต์ˆ™ํ•ด์ง€๊ฒŒ ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค๐Ÿ’ง

โœ”๏ธ๋ฉ”๋ชจ์ด์ œ์ด์…˜
๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด๋‘ฌ์„œ ๋‹ค์Œ์— ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ์ €์žฅ๋œ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ '๋ฉ”๋ชจ'ํ•ด๋‘๋Š” ๊ฒƒ์ด๋‹ค. JavaScript์—์„œ๋„ ํด๋กœ์ € ๊ฐœ๋…์„ ์ด์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰๋˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€์— ์žˆ๋Š” ์ €์žฅ ๊ณต๊ฐ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ๊ฐ์ฒดํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด๋‘๊ณ , ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ๊ทธ ๊ฐ’์„ ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

โœ”๏ธ ํ•จ์ˆ˜(Function) vs ๋ฉ”์„œ๋“œ(Method)
์ฝœ๋ฐฑํ•จ์ˆ˜์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€, '์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ์–ด๋–ค ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ „๋‹ฌํ•ด๋„ ํ˜ธ์ถœ๋  ๋•Œ๋Š” ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋œ๋‹ค'๋Š” ๋ง์ด ์žˆ์–ด์„œ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์ด ๋ญ์˜€์ง€..?ํ•˜๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‘˜๋‹ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๋‹จ์œ„๋ผ๋Š” ๊ณตํ†ต๋œ ํŠน์ง• ๋•Œ๋ฌธ์— ์–ธ์ œ ํ•จ์ˆ˜๋ผ๊ณ  ํ•˜๊ณ , ์–ธ์ œ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ• ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•ด์™”๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

ํ•จ์ˆ˜ : ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ, ์ฒ˜๋ฆฌ ํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜, function() ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ
๋ฉ”์„œ๋“œ : ํด๋ž˜์Šค์— ์ข…์†๋œ ํ•จ์ˆ˜(ํด๋ž˜์Šค ํ•จ์ˆ˜), ํ•ด๋‹น ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, object.method() ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ

์ •๋ฆฌํ•˜๋ฉด, ๋‘˜์€ class์— ์ข…์†๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ํ˜ธ์ถœ ๋ฐฉ์‹๋„ ๋‹ค๋ฅด๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์กฐ๊ธˆ๋” ํฌ๊ด„์ ์ธ ๊ฐœ๋…์ด๋‹ค! ์‚ฌ์‹ค ์ง€๊ธˆ๊นŒ์ง€๋Š” ๊ทธ๋ƒฅ ํ˜•ํƒœ๋งŒ ๋ณด๊ณ  ๊ตฌ๋ถ„ํ•ด์™”๋Š”๋ฐ ์ด๋ฒˆ๊ธฐํšŒ์— ๋‘˜์ด ์–ด๋–ค ์ ์—์„œ ๋‹ค๋ฅธ๊ฑด์ง€ ๋ช…ํ™•ํžˆ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๐ŸŽ ๊ธฐ์–ตํ•  ๊ฒƒ


โœ”๏ธ ์ฝœ๋ฐฑํ•จ์ˆ˜ = ํด๋กœ์ €
๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด, ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ  ํŠน์ • ์‹œ์ ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๋ถˆ๋ ค์ง„๋‹ค. ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์ž์‹ ์ด ํฌํ•จ๋œ ํ•จ์ˆ˜ ํ™˜๊ฒฝ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ํด๋กœ์ €๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค!

โœ”๏ธ reduce ๋ฉ”์„œ๋“œ
reduce ๋ฉ”์„œ๋“œ ์•ˆ์— return๊ฐ’์ด ์žˆ์–ด์•ผ ๋‹ค์Œ ๋ˆ„์‚ฐ๊ธฐ(accumulator)์— ์ ์šฉ์ด ๋œ๋‹ค! return๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” undefined๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค!

โœ”๏ธ  Timer API
setTimeout(callback, millisecond) : ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ ์‹คํ–‰
clearTimeout() : ์‹คํ–‰์ค‘์ธ setTimeout ์ข…๋ฃŒ
setInterval(callback, millisecond) : ์ผ์ • ์‹œ๊ฐ„์„ ๊ฐ„๊ฒฉ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰
clearInterval(timerId) : ๋ฐ˜๋ณต ์‹คํ–‰ ์ค‘์ธ setInterval ์ข…๋ฃŒ

 

๐ŸŽ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ


โœ”๏ธ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด
๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ์ข‹์€ ์ฝ”๋“œ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ๋””์ž์ธ ๋ฐฉ๋ฒ•๋ก ์ธ '๋””์ž์ธ ํŒจํ„ด' ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฒด์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์œ ์—ฐํ•˜๊ฒŒ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ธ๋ฐ, ๊ธฐ์กด ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ํ–‰๋™์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ํด๋กœ์ €์™€๋„ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ก ๊ณผ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

โœ”๏ธ ๋ฉ”๋ชจ์ด์ œ์ด์…˜, ์žฌ๊ท€
์ฐพ์•„๋ณด๋‹ˆ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํŒจํ„ด์„ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•ด์„œ, ์žฌ๊ท€์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ํ›„ ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

โœ”๏ธ Timer API์˜ ์“ฐ์ž„
setInterval, setTimeout ๋“ฑ์˜ Timer API๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘์—…๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•˜์ง€๋งŒ ๋” ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฐ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์„ ์–ธ์ œ ์–ด๋””์„œ ์–ด๋–ค์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋„ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

โœ”๏ธ requestAnimationFrame
Javascipt๋กœ ๋™์˜์ƒ ๋“ฑ์˜ ์›€์ง์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์‚ฌ๋žŒ์ด ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฒ”์œ„์ธ 16.6ms(1000ms / 60frame)๋งˆ๋‹ค ํ”„๋ ˆ์ž„์„ ์ฐ์–ด๋‚ด๊ธฐ ์œ„ํ•ด setInterval์ด๋‚˜ requestAnimationFrame๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋ณต์žกํ•ด์ง€๋ฉด ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” requestAnimationFrame๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜๋„ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ผ๋‹จ ์ด์ •๋„๋กœ๋งŒ ์•Œ์•„๋‘๊ณ  ์‹œ๊ฐ„์ด ๋‚จ๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ง€ ์ข€ ๋” ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค. 
๋ฐ˜์‘ํ˜•

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

210101_TIL (๋ณต์Šตํ•˜๋Š” ๋‚ )  (0) 2021.01.02
201231_TIL (์žฌ๊ท€๋ฌธ์ œํ’€๊ธฐ)  (0) 2020.12.31
201229_TIL  (0) 2020.12.30
201228_TIL  (0) 2020.12.29
201227_TIL  (0) 2020.12.28

๋Œ“๊ธ€