Community

๐Ÿš€ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์ž๋„ ์•Œ์•„์•ผ ํ•  ์‹œ๊ทธ๋„ ํŒจํ„ด: ํ”„๋ก ํŠธ์—”๋“œ ์ตœ์‹  ํŠธ๋ Œ๋“œ ์ด

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์„ธ๊ณ„๋Š” ๋Š์ž„์—†์ด ์ง„ํ™”ํ•˜๊ณ  ์žˆ์–ด์š”. ๊ทธ ์ค‘์‹ฌ์— '์‹œ๊ทธ๋„ ํŒจํ„ด'์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฌผ๊ฒฐ์ด ์ผ๊ณ  ์žˆ์ฃ . Vue์™€ Svelte ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ด๋ฏธ ๋„์ž…ํ•œ ์ด ํŒจํ„ด์€ ์ด์ œ React ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ด€์‹ฌ๋„ ๋Œ๊ณ  ์žˆ์–ด์š”. ์˜ค๋Š˜์€ ์ด ์‹œ๊ทธ๋„ ํŒจํ„ด์ด ๋ฌด์—‡์ด๊ณ , ์™œ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ๋ฏธ๋ž˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐ŸŽฏ ์‹œ๊ทธ๋„ ํŒจํ„ด์ด๋ž€? - ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ํ˜์‹ ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด์—์š” - ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์ •ํ™•ํžˆ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์—…๋ฐ์ดํŠธํ•ด์š” (ํ•€ํฌ์ธํŠธ ์—…๋ฐ์ดํŠธ) - ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ๊ฐ ์‹œ๊ทธ๋„์˜ ํ˜ธ์ถœ ํ™˜๊ฒฝ์„ ๊ธฐ์–ตํ•ด์š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณผ๊นŒ์š”? ```javascript const count = signal(0); const doubleCount = computed(() => count() * 2); effect(() => { console.log(`Count: ${count()}, Double: ${doubleCount()}`); }); count.set(5); // ์ฝ˜์†”์— "Count: 5, Double: 10" ์ถœ๋ ฅ ``` ์ด ์ฝ”๋“œ์—์„œ count๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, doubleCount์™€ effect ๋‚ด์˜ ๋กœ์ง์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ผ์š”. ๐Ÿ’ช ์‹œ๊ทธ๋„ ํŒจํ„ด์˜ ๊ฐ•์  - ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์ „์ฒด ๋ฆฌ๋ Œ๋”๋ง ๋Œ€์‹  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•ด์š” - ์ง๊ด€์ ์ธ ์ฝ”๋“œ: ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์„ ๊ฐ„์†Œํ™”ํ•ด์š” - ๋ฐ˜์‘์„ฑ: ๊ฐ’ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ค„์ ธ์š” ๐Ÿ” ํ˜„์žฌ ์‚ฌ์šฉ ํ˜„ํ™ฉ - Vue 3: ์‹œ๊ทธ๋„ ํŒจํ„ด์„ ํ…œํ”Œ๋ฆฟ ์—”์ง„๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‹œ๊ทธ๋„ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์š” - Svelte 4,5: ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์‹œ๊ทธ๋„ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์š” - SolidJS, Preact: ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์‹œ๊ทธ๋„์„ ์‚ฌ์šฉํ•ด์š” - React: ํ˜„์žฌ๋Š” ์ปดํฌ๋„ŒํŠธ ์ „์ฒด ์žฌํ‰๊ฐ€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ณผ์—ฐ ๋ฏธ๋ž˜์—” ์–ด๋–จ๊นŒ์š”? ๐Ÿค” ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ƒ๊ฐํ•ด๋ณผ ์  - ์‹œ๊ทธ๋„ ํŒจํ„ด์ด ์ œ๊ณตํ•˜๋Š” ์„ฑ๋Šฅ ์ด์ ์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? - ํ…Œ์ด๋ธ”์ด๋‚˜ ์—๋””ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์‹œ๊ทธ๋„ ํŒจํ„ด์„ ๋„์ž…ํ•œ๋‹ค๋ฉด ์–ด๋–ค ์žฅ๋‹จ์ ์ด ์žˆ์„๊นŒ์š”? - ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ์„ ์˜ˆ์ธกํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋Œ€๋น„ํ•ด์•ผ ํ• ๊นŒ์š”? 23๋…„๋„์—๋Š” React ์ฝ”์–ด ํŒ€์—์„œ signal์„ ๋ฆฌ์•กํŠธ์— ๋„์ž…ํ•˜๋ฉด ์–ด๋–จ๊นŒ์— ๋Œ€ํ•œ ํŠธ์œ—์ด ๋…ผ์˜๋˜์—ˆ์–ด์š”. ํ˜„์žฌ ๋ฆฌ์•กํŠธ๋Š” props์˜ ๊ฐ’ ๋น„๊ต๋ฅผ ํ†ตํ•ด ๋ฆฌ๋žœ๋”๋ง์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์žˆ์ง€๋งŒ, props ๋น„๊ต๋Š” ์กฐ์ƒ๋‹˜์ด ํ•ด์ฃผ๋‚˜์š”?? ์—ฌ์ „ํžˆ ๋ฆฌ์•กํŠธ์˜ ์ตœ์ ํ™”๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฆฌ์•กํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” React.memo๋ฅผ ๋Œ€์‹  ์”Œ์›Œ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ํ•ด์ฃผ๊ณ  ์žˆ๋Š”๋ฐ jsx ํŒŒ์‹ฑ๊ณผ ๊ฒฐํ•ฉํ•ด์„œ ์‹œ๊ทธ๋„์„ ์ ์šฉํ•˜๋ฉด vdom์ด ์‚ฌ๋ผ์ง€์ง„ ์•Š๋”๋ผ๋„, ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์ด์ ์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค