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

C-log

DOM, ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, Hook, Promise(callback) ๋ณธ๋ฌธ

๐Ÿ› ๏ธ๊ธฐ์ˆ  ๋Œ€๋น„

DOM, ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, Hook, Promise(callback)

4:Bee 2024. 3. 15. 10:11
728x90

1. DOM(Document Object Model)์ด๋ž€?
DOM์€ ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋…ธ๋“œ์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” ์š”์†Œ(element), ์†์„ฑ(attribute) ๋“ฑ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์— ๋”ฐ๋ผ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. JavaScript์˜ ๋ฅผ ํ†ตํ•ด `document` ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋…ธ๋“œ๋ฅผ ์ฝ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์˜ ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

keyword : ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ, ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค, ์ƒ์†๊ด€๊ณ„, ์š”์†Œ, ์†์„ฑ, js์˜ documnet ๊ฐ์ฒด

2. DOM๊ณผ Virtual DOM์˜ ์ฐจ์ด๋Š”?
DOM: ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €, ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €๋Š” DOM์„ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Virtual DOM: ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” DOM์˜ ๊ฐ€๋ฒผ์šด ์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด, Virtual DOM์— ๋จผ์ € ์ ์šฉ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ์„ ์‹ค์ œ DOM์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
 
3. ๋™๊ธฐ(Synchronous)์™€ ๋น„๋™๊ธฐ(Asynchronous)๋ž€?
๋™๊ธฐ: ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•œ ์ž‘์—…์ด ๋๋‚˜์•ผ ๋‹ค์Œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์˜ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ: ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ๋‹ค์Œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ํŒŒ์ผ I/O์™€ ๊ฐ™์ด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
 
4. ์ปค์Šคํ…€ ํ›…(Custom Hooks)๊ณผ ์ผ๋ฐ˜ ํ›…(Hooks)์˜ ์ฐจ์ด๋Š”?
์ผ๋ฐ˜ ํ›…: React์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ํ›…์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, `useState`, `useEffect` ๊ฐ™์€ ํ›…๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ React ๊ธฐ๋Šฅ์„ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.
์ปค์Šคํ…€ ํ›…: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“œ๋Š” ํ›…์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ํ›…์€ ์ผ๋ฐ˜ ํ›…์„ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
โ€ป์ปค์Šคํ…€ ํ›… ์ œ์ž‘์‹œ ๊ณ ๋ คํ•  ์ , ๊ทœ์น™
1. ์ด๋ฆ„: ์ปค์Šคํ…€ ํ›…์˜ ์ด๋ฆ„์€ use ์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ, React๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ›…์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2. ๋กœ์ง ๋ถ„๋ฆฌ: ์ปค์Šคํ…€ ํ›…์„ ๋งŒ๋“ค ๋•Œ๋Š” ๋กœ์ง์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž˜ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3. ์˜์กด์„ฑ ๊ด€๋ฆฌ: ์ปค์Šคํ…€ ํ›… ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ƒํƒœ์™€ ํšจ๊ณผ๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋ช…์‹œ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด React๊ฐ€ ํ•ด๋‹น ํ›…์˜ ์˜์กด์„ฑ์„ ์ถ”์ ํ•˜์—ฌ ์ ์ ˆํ•œ ์‹œ๊ธฐ์— ํ›…์„ ์žฌ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 
5. Promise๋ž€? (์ฝœ๋ฐฑํ•จ์ˆ˜์™€ ์—ฐ๊ด€์ง€์–ด์„œ)
Promise๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ตœ์ข… ์™„๋ฃŒ(๋˜๋Š” ์‹คํŒจ) ๋ฐ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑ ์ง€์˜ฅ์œผ๋กœ๋ถ€ํ„ฐ ๋ฒ—์–ด๋‚˜๊ฒŒ ํ•ด ์ฃผ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Promise๋Š” `.then()`, `.catch()`, `.finally()` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์„ฑ๊ณต, ์‹คํŒจ, ์™„๋ฃŒ ํ›„ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(Then์ฒด์ธ ์„ค๋ช…์ด ํ•„์š”)

keyword : ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ’, ๊ฐ์ฒด, ์ฝœ๋ฐฑํ•จ์ˆ˜, ์ฝœ๋ฐฑ์ง€์˜ฅ
 
 
5.1 ์ฝœ๋ฐ•ํ•จ์ˆ˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€
์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์—๊ฒŒ ์ธ์ž๋กœ ์ „๋‹ฌ ๋˜์–ด ํŠน์ • ์ƒํ™ฉ์ด๋‚˜ ์กฐ๊ฑด์— ๋„๋‹ฌ ํ•˜๋ฉด ํ˜ธ์ถœ, ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ฆ‰, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์—๊ฒŒ ์ž‘์—…์„ ์˜์กดํ•˜๊ณ , ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ํ•จ์ˆ˜์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
 
 
6. async์™€ await๋ž€?
`async`์™€ `await`๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š” JavaScript์˜ ๋ฌธ๋ฒ•์  ์„คํƒ•(syntactic sugar)์ž…๋‹ˆ๋‹ค. `async` ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ํ•จ์ˆ˜ ๋‚ด์—์„œ `await` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. await๋Š” Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ , Promise์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. await๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, Promies์˜ .then() ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ , ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, await๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ try-catch ๋ธ”๋ก์œผ๋กœ ๊ฐ์‹ธ์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ, ๋น„๋™๊ธฐ ์ž‘์—… ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

keyword : ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑ, async๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜, await๋Š” Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ธฐ๋‹ค๋ฆผ, ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

728x90
Comments