Front-End/React

React] React ๋ž€...?

์™•๊ฐ€๐Ÿ‘ 2023. 6. 4. 15:24
728x90
๋ฐ˜์‘ํ˜•

React

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. (์ตœ๊ทผ์—๋Š” ์ฃผ๋กœ TypeScript๋กœ ๊ตฌํ˜„)

Web์—๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ๋ชจ๋ฐ”์ผ์—์„œ๋Š” React Navive, ๊ฐ€์ƒ App์—์„œ๋Š” React 360 ๋“ฑ์ด ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ DOM์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ, ํŠน์ • DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ๋ณด๋‹ค๋Š”

์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ™”๋ฉด์„ ๊ทธ๋ฆผ์œผ๋กœ์จ, ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ณต์žกํ•œ ๋กœ์ง ๋“ฑ ๊ณ ๋ฏผํ•  ๊ฒƒ์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

 

๋Œ€์‹  ํ™”๋ฉด์€ ์ „๋ถ€ ์ƒˆ๋กœ ๊ทธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋Š๋ฆด ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒ DOM (Virual DOM)์„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 


 

 

๊ฐ€์ƒ DOM

์‹ค์ œ ๋ณด์ด๋Š” DOM์ด ์•„๋‹ˆ๋ผ

๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ƒ์œผ๋กœ ์กด์žฌํ•˜๋Š” DOM์œผ๋กœ JS๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

state์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๋ฉด, ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ณณ์˜ UI๋ฅผ ๊ฐ€์ƒ DOM์„ ํ†ตํ•ด ๋ Œ๋”๋ง ํ›„ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €์˜ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 


 

 

๋™์ž‘ ์›๋ฆฌ

์‹ค์ œ๋กœ ๋ฆฌ์•กํŠธ๋Š” 2๊ฐœ์˜ ๊ฐ€์ƒ๋”์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋Š” ๋ Œ๋”๋ง ์ด์ „์˜ ํ™”๋ฉด ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋”

๋‘ ๋ฒˆ์งธ๋Š” ๋ Œ๋”๋ง ์ดํ›„์— ๋ณด์ด๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ€์ƒ ๋”

๋ฆฌ์•กํŠธ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฆฌ๋ Œ๋”๋ง ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ์‹œ์ ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ๋”์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ์ฒซ ๋ฒˆ์งธ ๊ฐ€์ƒ๋”๊ณผ ๋‘ ๋ฒˆ์งธ ๊ฐ€์ƒ๋”์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€ํ•œ Element๋ฅผ ํ™•์ธํ•˜๊ณ (Diffing), ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.(Reconciliation)

 

์—ฌ๊ธฐ์„œ state๊ฐ€ ๋ณ€ํ•  ๋–„ ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ ,

Batch ๋ผ๊ณ  ํ•ด์„œ ๋ฐ”๋€ ๊ฒƒ๋“ค์„ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ์— ๊ทธ๋ ค์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

(Batch๋ž€, ์—ฌ๋Ÿฌ๊ฐœ์˜ state ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ๋ฌถ์Œ. 16ms๋ฅผ ์ฃผ๊ธฐ๋กœ ๋™์ž‘ํ•œ๋‹ค๊ณ  ํ•จ.)

 

 


 

 

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

'Front-End > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React] Hook  (0) 2023.06.20
React] Hook : useState  (1) 2023.06.06
React] Hook : props  (1) 2023.06.06
React] Import & export  (0) 2023.06.06
React] Component & JSX  (0) 2023.06.04