๐ ๋ฆฌ์กํธ ๊ฐ๋ฐ์๋ ์์์ผ ํ ์๊ทธ๋ ํจํด: ํ๋ก ํธ์๋ ์ต์ ํธ๋ ๋ ์ด
ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ธ๊ณ๋ ๋์์์ด ์งํํ๊ณ ์์ด์. ๊ทธ ์ค์ฌ์ '์๊ทธ๋ ํจํด'์ด๋ผ๋ ์๋ก์ด ๋ฌผ๊ฒฐ์ด ์ผ๊ณ ์์ฃ . 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์ด ์ฌ๋ผ์ง์ง ์๋๋ผ๋, ๋ฉ๋ชจ๋ฆฌ๋ ์ฑ๋ฅ ์ธก๋ฉด์์ ์ด์ ์ ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.