React์ ์คํ์ `experimental_use` ํ ๊ณผ `<Scope>` ์ปดํฌ๋ํธ์ ๋ํ ์ฌ์ธต ๊ฐ์ด๋๋ก, ์ค์ฝํ ๊ด๋ฆฌ, ์ปจํ ์คํธ ๊ฒฉ๋ฆฌ, ๊ฒฌ๊ณ ํ React ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๊ณ ๊ธ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ ๋ํ ํต์ฐฐ์ ์ ๊ณตํฉ๋๋ค.
React์ `experimental_use`์ ``: ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ์ค์ฝํ ๊ด๋ฆฌ ๋ง์คํฐํ๊ธฐ
์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ธ๊ธฐ ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ์ง์์ ์ผ๋ก ํ๊ตฌ๋๋ ๋ถ์ผ ์ค ํ๋๋ ์ค์ฝํ ๊ด๋ฆฌ, ์ฆ ์ปดํฌ๋ํธ๊ฐ ๊ณต์ ์ํ ๋ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ณ ์ํธ ์์ฉํ๋ ๋ฐฉ์์
๋๋ค. ์คํ์ ์ธ `experimental_use` ํ
์ <Scope> ์ปดํฌ๋ํธ์ ํจ๊ป ์ฌ์ฉ๋ ๋ React ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ค์ฝํ์ ์ปจํ
์คํธ๋ฅผ ์ ์ดํ๋ ๊ฐ๋ ฅํ(์์ง ์คํ์ ์ด์ง๋ง) ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๊น์ด ํ๊ณ ๋ค์ด, ๋ณต์กํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ทธ ๋ชฉ์ , ์ฌ์ฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ด์ ์ ์ค๋ช
ํฉ๋๋ค.
React์์์ ์ค์ฝํ ๊ด๋ฆฌ๋?
React์ ๋งฅ๋ฝ์์ ์ค์ฝํ ๊ด๋ฆฌ๋ ์ปดํฌ๋ํธ๊ฐ ์ํ, ์ปจํ ์คํธ ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ณ ์์ ํ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค. ์ ํต์ ์ผ๋ก React๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด prop ๋๋ฆด๋ง๊ณผ ์ปจํ ์คํธ API์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ด ํจ๊ณผ์ ์ด๊ธด ํ์ง๋ง, ๊น๊ฒ ์ค์ฒฉ๋ ์ปดํฌ๋ํธ๋ ๋ณต์กํ ๋ฐ์ดํฐ ์์กด์ฑ์ ๊ฐ์ง ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ฒ๊ฑฐ๋ก์์ง ์ ์์ต๋๋ค. ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Prop ๋๋ฆด๋ง: ํ๋กญ์ ์ง์ ์ฌ์ฉํ์ง ์๋ ์ฌ๋ฌ ๊ณ์ธต์ ์ปดํฌ๋ํธ๋ฅผ ํตํด ์ ๋ฌํ์ฌ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
- ์ปจํ ์คํธ ๊ฒฐํฉ: ์ปดํฌ๋ํธ๊ฐ ํน์ ์ปจํ ์คํธ ์ ๊ณต์์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๊ณ ํ ์คํธํ๊ธฐ ์ด๋ ค์์ง๋๋ค.
- ์ ์ญ ์ํ ๊ด๋ฆฌ์ ์ด๋ ค์: ๋ค์ํ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Redux, Zustand, Jotai ๋ฑ) ์ค์์ ์ ํํ๋ ๊ฒ์ ๋ณต์ก์ฑ์ ๋ํ๋ฉฐ, ์ ์คํ๊ฒ ๊ตฌํํ์ง ์์ผ๋ฉด ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ด๋ํ ์ ์์ต๋๋ค.
`experimental_use` ํ
๊ณผ <Scope> ์ปดํฌ๋ํธ๋ React ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ค์ฝํ์ ์ปจํ
์คํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ณด๋ค ์ ์ด๋๊ณ ๋ช
์์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํจ์ผ๋ก์จ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๊ฒ๋ค์ ํ์ฌ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฉฐ, ์ด๋ API๊ฐ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค.
`experimental_use`์ `<Scope>` ์๊ฐ
์ด๋ฌํ ์คํ์ ๊ธฐ๋ฅ๋ค์ ํจ๊ป ์๋ํ์ฌ React ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ด์ ๊ฒฉ๋ฆฌ๋ ์ค์ฝํ๋ฅผ ์์ฑํฉ๋๋ค. ์ค์ฝํ๋ฅผ ํน์ ๊ฐ๊ณผ ์ํ๊ฐ ํด๋น ์๋๋ฐ์ค ๋ด์ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉํ ์ ์๋ ์๋๋ฐ์ค๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฉ๋ฆฌ๋ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ, ํ ์คํธ ์ฉ์ด์ฑ ๋ฐ ์ ๋ฐ์ ์ธ ์ฝ๋ ๋ช ํ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
`experimental_use` ํ
`experimental_use` ํ
์ ์ฌ์ฉํ๋ฉด ํน์ ์ค์ฝํ ๋ด์์ ๊ฐ์ ์์ฑํ๊ณ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด ํ
์ ๊ฐ์ ์์ฑ์ ๋๋ ํฉํ ๋ฆฌ ํจ์๋ก ์๊ฐํ ์ ์๋ '๋ฆฌ์์ค'๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ
์ ์ค์ฝํ ๋ด์์ ๊ฐ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, `experimental_use`๋ก ์์ฑ๋ ๊ฐ์ ์ ์ญ์ ์ผ๋ก ๊ณต์ ๋์ง ์์ผ๋ฉฐ, ๊ฐ์ฅ ๊ฐ๊น์ด <Scope> ์ปดํฌ๋ํธ๋ก ์ค์ฝํ๊ฐ ์ ํ๋ฉ๋๋ค.
์์ : ์ค์ฝํ๊ฐ ์ง์ ๋ ์นด์ดํฐ ๋ง๋ค๊ธฐ
```javascript import React from 'react'; import { experimental_use as use, Scope } from 'react'; function createCounter() { let count = 0; return { getCount: () => count, increment: () => { count++; }, }; } function Counter() { const counter = use(createCounter); return ( <div> Count: {counter.getCount()} <button onClick={counter.increment}>Increment</button> </div> ); } function App() { return ( <Scope> <Counter /> <Counter /> </Scope> ); } export default App; ```์ด ์์ ์์ createCounter๋ ํฉํ ๋ฆฌ ํจ์์
๋๋ค. <Scope> ๋ด์ ๊ฐ <Counter/> ์ปดํฌ๋ํธ๋ ์์ฒด์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ์นด์ดํฐ ์ธ์คํด์ค๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค. ํ ์นด์ดํฐ์์ "Increment"๋ฅผ ํด๋ฆญํด๋ ๋ค๋ฅธ ์นด์ดํฐ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
`<Scope>` ์ปดํฌ๋ํธ
<Scope> ์ปดํฌ๋ํธ๋ ์ค์ฝํ์ ๊ฒฝ๊ณ๋ฅผ ์ ์ํฉ๋๋ค. <Scope> ๋ด์์ `experimental_use`๋ก ์์ฑ๋ ๋ชจ๋ ๊ฐ์ ํด๋น <Scope>์ ํ์ ์ปดํฌ๋ํธ์์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ์ํ๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ์๋ํ์ง ์์ ๋ถ์์ฉ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ปจํ
์ด๋ ์ญํ ์ ํฉ๋๋ค.
์์ : ์ค์ฒฉ๋ ์ค์ฝํ
```javascript import React from 'react'; import { experimental_use as use, Scope } from 'react'; function createTheme(themeName) { return { name: themeName, getTheme: () => themeName, }; } function ThemeDisplay() { const theme = use(() => createTheme("Default Theme")); return <div>Theme: {theme.getTheme()}</div>; } function App() { return ( <Scope> <ThemeDisplay /> <Scope> <ThemeDisplay /> </Scope> </Scope> ); } export default App; ```ํ์ฌ ๋ชจ๋ ํ
๋ง๋ "Default Theme"์
๋๋ค. ์๋ํ๋ฉด ํฉํ ๋ฆฌ ํจ์๊ฐ ํญ์ ๋์ผํ ํ
๋ง ์ด๋ฆ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์
๋๋ค. ํ์ง๋ง ๋ด๋ถ ์ค์ฝํ์์ ํ
๋ง๋ฅผ ์ฌ์ ์ํ๊ณ ์ถ๋ค๋ฉด, ํ์ฌ ์คํ์ API๋ก๋ (์ด ๊ธ์ ์ฐ๋ ์์ ์์) ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ํ์ฌ ์คํ์ ๊ตฌํ์ ํ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ์ง๋ง, ์ค์ฒฉ๋ <Scope> ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
`experimental_use`์ `<Scope>` ์ฌ์ฉ์ ์ด์
- ํฅ์๋ ์ปดํฌ๋ํธ ๊ฒฉ๋ฆฌ: ๊ฒฉ๋ฆฌ๋ ์ค์ฝํ๋ฅผ ์์ฑํ์ฌ ์ปดํฌ๋ํธ ๊ฐ์ ์๋ํ์ง ์์ ๋ถ์์ฉ๊ณผ ์์กด์ฑ์ ๋ฐฉ์งํฉ๋๋ค.
- ํฅ์๋ ์ฌ์ฌ์ฉ์ฑ: ์ปดํฌ๋ํธ๋ ๋ ์๋ฆฝ์ ์ด ๋๊ณ ํน์ ์ ์ญ ์ํ๋ ์ปจํ ์คํธ ์ ๊ณต์์ ๋ ์์กดํ๊ฒ ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์์ ์ฌ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ๋จ์ํ๋ ํ ์คํธ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ค์ฝํ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ ์ ์ดํ ์ ์์ผ๋ฏ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ๋ช ์์ ์ธ ์์กด์ฑ ๊ด๋ฆฌ: `experimental_use`๋ ๋ฆฌ์์ค ํฉํ ๋ฆฌ ํจ์๋ฅผ ์ ์ํ๋๋ก ์๊ตฌํจ์ผ๋ก์จ ์์กด์ฑ์ ๋ ๋ช ์์ ์ผ๋ก ๋ง๋ค์ด, ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋์ง ๋ช ํํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
- Prop ๋๋ฆด๋ง ๊ฐ์: ์ํ๊ฐ ํ์ํ ๊ณณ์ ๋ ๊ฐ๊น๊ฒ ๊ด๋ฆฌํจ์ผ๋ก์จ ์ฌ๋ฌ ๊ณ์ธต์ ์ปดํฌ๋ํธ๋ฅผ ํตํด ํ๋กญ์ ์ ๋ฌํ๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
`experimental_use`์ `<Scope>`์ ์ฌ์ฉ ์ฌ๋ก
์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋ณต์กํ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ฑฐ๋ ์ปดํฌ๋ํธ๋ฅผ ์ํ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ ๋ง๋ค์ด์ผ ํ๋ ์๋๋ฆฌ์ค์์ ํนํ ์ ์ฉํฉ๋๋ค. ๋ช ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํผ ๊ด๋ฆฌ: ํผ ์ฃผ์์
<Scope>๋ฅผ ๋ง๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ํผ ์ํ(์ ๋ ฅ ๊ฐ, ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ)๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ `react-hook-form`๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ `useForm`์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ์ง๋ง, ์ค์ฝํ์ ๋ํด ์ ์ฌ์ ์ผ๋ก ๋ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค. - ํ
๋ง ์ ์ฉ: ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค๋ฅธ ์น์
์ ๋ณ๋์
<Scope>์ปดํฌ๋ํธ๋ก ๊ฐ์ธ๊ณ ๋ค๋ฅธ ํ ๋ง ๊ฐ์ ์ ๊ณตํ์ฌ ๋ค๋ฅธ ํ ๋ง๋ฅผ ์ ์ฉํฉ๋๋ค. - ๋ง์ดํฌ๋กํ๋ก ํธ์๋์์์ ์ปจํ ์คํธ ๊ฒฉ๋ฆฌ: ๋ง์ดํฌ๋กํ๋ก ํธ์๋๋ฅผ ๊ตฌ์ถํ ๋, ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๊ฐ ๋ง์ดํฌ๋กํ๋ก ํธ์๋์ ์ปจํ ์คํธ์ ์์กด์ฑ์ ๊ฒฉ๋ฆฌํ์ฌ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๋ฐ ์ ๋ฐ์ดํธ๋ ์ ์๋๋ก ๋์์ค๋๋ค.
- ๊ฒ์ ์ํ ๊ด๋ฆฌ: ๊ฒ์์์
<Scope>๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๊ฒ์ ๋ ๋ฒจ์ด๋ ์บ๋ฆญํฐ์ ์ํ๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ์๋ํ์ง ์์ ์ํธ์์ฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ ํ๋ ์ด์ด ์บ๋ฆญํฐ๋ ์์ ์ ์ฒด๋ ฅ, ์ธ๋ฒคํ ๋ฆฌ, ๋ฅ๋ ฅ์ ํฌํจํ๋ ์์ฒด ์ค์ฝํ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. - A/B ํ ์คํ : ์ค์ฝํ๋ฅผ ์ฌ์ฉํ์ฌ A/B ํ ์คํ ๋ชฉ์ ์ผ๋ก ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์ปดํฌ๋ํธ๋ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๋ณํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ฐ ์ค์ฝํ๋ ๋ค๋ฅธ ๊ตฌ์ฑ์ด๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ณ ๋ ค ์ฌํญ
`experimental_use`์ <Scope>๋ฅผ ์ฑํํ๊ธฐ ์ ์, ๊ทธ ํ๊ณ๋ฅผ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ์คํ์ ์ํ: ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์์ง ์คํ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. API๊ฐ ์์ ๋๊ฑฐ๋ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ์๋ ์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฃผ์ํด์ ์ฌ์ฉํ์ธ์.
- ๋ณต์ก์ฑ: ์ค์ฝํ๋ฅผ ๋์ ํ๋ฉด, ํนํ ์ ์คํ๊ฒ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ ๋ํ ์ ์์ต๋๋ค. ์ด์ ์ด ์ถ๊ฐ๋ ๋ณต์ก์ฑ์ ์์ํ๋์ง ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ค๋ฒํค๋: ์ค์ฝํ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ง๋ง, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ ๋ฏธ๋ฏธํ ๊ฒ์ ๋๋ค. ์ฑ๋ฅ์ด ์ฐ๋ ค๋๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ๋กํ์ผ๋งํ์ธ์.
- ํ์ต ๊ณก์ : ๊ฐ๋ฐ์๋ค์ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ค์ฝํ์ ๊ฐ๋
๊ณผ `experimental_use` ๋ฐ
<Scope>๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํด์ผ ํฉ๋๋ค. - ์ ํ๋ ๋ฌธ์: ๊ธฐ๋ฅ์ด ์คํ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋ฌธ์๊ฐ ๋ถ์กฑํ๊ฑฐ๋ ๋ถ์์ ํ ์ ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ๋ ์คํ๊ณผ ๊ณต์ ๋ ์ง์์ ์์กดํฉ๋๋ค.
- ์์ ์ค์ฝํ์์ ์ค์ฝํ ๊ฐ ์ฌ์ ์๋ฅผ ์ํ ๋ด์ฅ ๋ฉ์ปค๋์ฆ ๋ถ์ฌ: "์ค์ฒฉ๋ ์ค์ฝํ" ์์ ์์ ๋ณด์ฌ์ฃผ๋ฏ์ด, ํ์ฌ ์คํ์ API๋ ์์ ์ค์ฝํ ๋ด์์ ๋ถ๋ชจ ์ค์ฝํ์์ ์ ๊ณต๋ ๊ฐ์ ์ฌ์ ์ํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ด ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ถ๊ฐ์ ์ธ ์คํ๊ณผ ์ ์ฌ์ ์ธ API ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค.
`experimental_use`์ `<Scope>`์ ๋์
`experimental_use`์ <Scope>๊ฐ ์ค์ฝํ ๊ด๋ฆฌ์ ๋ํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ง๋ง, ๋ช ๊ฐ์ง ํ๋ฆฝ๋ ๋์์ด ์กด์ฌํฉ๋๋ค:
- React ์ปจํ ์คํธ API: ๋ด์ฅ๋ ์ปจํ ์คํธ API๋ prop ๋๋ฆด๋ง ์์ด ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํ ํ์คํ ์ ํ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ๊ฐ ํน์ ์ปจํ ์คํธ ์ ๊ณต์์ ์ง๋์น๊ฒ ์์กดํ๊ฒ ๋๋ฉด ์ปจํ ์คํธ ๊ฒฐํฉ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Redux, Zustand, Jotai): ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ค์ ์ง์ค์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๊ฐ ์ฌํ ๋๋ฒ๊น ๋ฐ ๋ฏธ๋ค์จ์ด์ ๊ฐ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์๋นํ ๋ณด์ผ๋ฌํ๋ ์ดํธ์ ๋ณต์ก์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์ปดํฌ์ง์ ์ ์ด์ฉํ Prop ๋๋ฆด๋ง: ์ข ์ข ๊ถ์ฅ๋์ง ์์ง๋ง, ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ๋น๊ต์ ์์ ์๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ prop ๋๋ฆด๋ง์ด ์คํ ๊ฐ๋ฅํ ์ต์ ์ด ๋ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ ์ปดํฌ์ง์ ํจํด์ ์ฌ์ฉํ๋ฉด prop ๋๋ฆด๋ง์ ์ผ๋ถ ๋จ์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ปค์คํ ํ : ์ปค์คํ ํ ์ ๋ง๋ค๋ฉด ์ํ ๋ก์ง์ ์บก์ํํ๊ณ ์ฝ๋ ์ค๋ณต์ ์ค์ผ ์ ์์ต๋๋ค. ์ปค์คํ ํ ์ ๋ํ ์ปจํ ์คํธ ๊ฐ์ ๊ด๋ฆฌํ๊ณ ์ปดํฌ๋ํธ์ ๋ ๊ฐ์ํ๋ API๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์ฝ๋ ์์ : ์ค์ ์ ์ฉ ์ฌ๋ก
์ด์ `experimental_use`์ <Scope>๋ฅผ ์ค์ ์๋๋ฆฌ์ค์์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํ ๋ ์์ธํ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ์ค์ฝํ๊ฐ ์ง์ ๋ ์ฌ์ฉ์ ํ๊ฒฝ์ค์
ํ ๋ง, ์ธ์ด, ๊ธ๊ผด ํฌ๊ธฐ์ ๊ฐ์ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ฌ์ฉ์ ํ๊ฒฝ์ค์ ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ค๊ณ ์์ํด ๋ณด์ธ์. ์ด๋ฌํ ํ๊ฒฝ์ค์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์น์ ๋ด์์ ๊ฒฉ๋ฆฌํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
```javascript import React from 'react'; import { experimental_use as use, Scope } from 'react'; function createPreferences(initialPreferences) { let preferences = { ...initialPreferences }; return { getPreference: (key) => preferences[key], setPreference: (key, value) => { preferences[key] = value; }, }; } function PreferenceDisplay({ key }) { const preferences = use(() => createPreferences({ theme: "light", language: "en", fontSize: "16px" })); return <div>{key}: {preferences.getPreference(key)}</div>; } function PreferenceSection() { return ( <div> <h3>Preferences</h3> <PreferenceDisplay key="theme"/> <PreferenceDisplay key="language"/> <PreferenceDisplay key="fontSize"/> </div> ); } function App() { return ( <div> <h1>My App</h1> <Scope> <PreferenceSection /> </Scope> <Scope> <PreferenceSection /> </Scope> </div> ); } export default App; ```์ด ์์ ์์ ๊ฐ <Scope>๋ ์์ฒด์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ์ฌ์ฉ์ ํ๊ฒฝ์ค์ ์ธํธ๋ฅผ ์์ฑํฉ๋๋ค. ํ ์ค์ฝํ ๋ด์์ ๋ณ๊ฒฝ๋ ํ๊ฒฝ์ค์ ์ ๋ค๋ฅธ ์ค์ฝํ์ ํ๊ฒฝ์ค์ ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์์ 2: ์ค์ฝํ๋ฅผ ์ด์ฉํ ํผ ์ํ ๊ด๋ฆฌ
์ด ์์ ๋ <Scope> ๋ด์์ ํผ ์ํ๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ํ ํ์ด์ง์ ์ฌ๋ฌ ํผ์ด ์๊ณ ์๋ก ๊ฐ์ญํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ถ์ ๋ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค.
๊ฐ๊ฐ์ <Scope> ๋ด์ ์๋ <Form/> ์ปดํฌ๋ํธ๋ ์์ฒด์ ๋
๋ฆฝ์ ์ธ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. Form 1์์ ์ด๋ฆ์ด๋ ์ด๋ฉ์ผ์ ์
๋ฐ์ดํธํด๋ Form 2์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
`experimental_use`์ `<Scope>` ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ด๋ฌํ ์คํ์ ๊ธฐ๋ฅ๋ค์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์:
- ์๊ฒ ์์ํ๊ธฐ: ํ ๋ฒ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฆฌํฉํฐ๋งํ๋ ค๊ณ ์๋ํ์ง ๋ง์ธ์. ๊ฒฝํ๊ณผ ์ดํด๋ฅผ ์ป๊ธฐ ์ํด ์ฝ๋์ ์๊ณ ๊ฒฉ๋ฆฌ๋ ๋ถ๋ถ์์ `experimental_use`์
<Scope>๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์. - ์ค์ฝํ ๊ฒฝ๊ณ ๋ช
ํํ ์ ์ํ๊ธฐ:
<Scope>์ปดํฌ๋ํธ๋ฅผ ์ด๋์ ๋ฐฐ์นํ ์ง ์ ์คํ๊ฒ ๊ณ ๋ คํ์ธ์. ์ ์ ์๋ ์ค์ฝํ๋ ๋ ผ๋ฆฌ์ ์ธ ๊ธฐ๋ฅ ๋จ์๋ฅผ ์บก์ํํ๊ณ ์๋ํ์ง ์์ ๋ถ์์ฉ์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค. - ์ค์ฝํ ๋ฌธ์ํํ๊ธฐ: ๊ฐ ์ค์ฝํ์ ๋ชฉ์ ๊ณผ ํฌํจ๋ ๊ฐ์ ์ค๋ช ํ๊ธฐ ์ํด ์ฝ๋์ ์ฃผ์์ ์ถ๊ฐํ์ธ์. ์ด๋ ๋ค๋ฅธ ๊ฐ๋ฐ์(๊ทธ๋ฆฌ๊ณ ๋ฏธ๋์ ์์ )๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธํ๊ธฐ: ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์คํ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ฒ ์ ํ ํ ์คํธํ๋ ๊ฒ์ด ํนํ ์ค์ํฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๊ฐ์์ ์ค์ฝํ ๋ด์์ ์์๋๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ธ์.
- ์ต์ ์ ๋ณด ์ ์งํ๊ธฐ: ์ต์ React ๋ฆด๋ฆฌ์ค์ `experimental_use` ๋ฐ
<Scope>์ ๋ํ ๋ ผ์๋ฅผ ๊ณ์ ์ฃผ์ํ์ธ์. API๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฉฐ ์๋ก์ด ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ๋ํ๋ ์ ์์ต๋๋ค. - ๊ณผ์ฉ ํผํ๊ธฐ: ์ค์ฝํ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ปจํ ์คํธ API๋ prop ๋๋ฆด๋ง๊ณผ ๊ฐ์ ๋ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ผ๋ก ์ถฉ๋ถํ๋ค๋ฉด ๊ทธ๊ฒ๋ค์ ์ฌ์ฉํ์ธ์. ์ค์ฝํ๋ ์ปดํฌ๋ํธ ๊ฒฉ๋ฆฌ, ์ฌ์ฌ์ฉ์ฑ ๋๋ ํ ์คํธ ์ฉ์ด์ฑ ์ธก๋ฉด์์ ๋ช ํํ ์ด์ ์ ์ ๊ณตํ ๋๋ง ๋์ ํ์ธ์.
- ๋์ ๊ณ ๋ คํ๊ธฐ: ํญ์ ๋ค๋ฅธ ์ํ ๊ด๋ฆฌ ์๋ฃจ์ ์ด ํน์ ์๊ตฌ์ ๋ ์ ํฉํ์ง ํ๊ฐํ์ธ์. Redux, Zustand ๋ฐ ๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํน์ ์๋๋ฆฌ์ค์์ ๋ ํฌ๊ด์ ์ธ ๊ธฐ๋ฅ๊ณผ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
React ์ค์ฝํ ๊ด๋ฆฌ์ ๋ฏธ๋
`experimental_use` ํ
๊ณผ <Scope> ์ปดํฌ๋ํธ๋ React์์ ์ค์ฝํ ๊ด๋ฆฌ๋ฅผ ์ํ ํฅ๋ฏธ๋ก์ด ๋ฐฉํฅ์ ์ ์ํฉ๋๋ค. ์์ง ์คํ์ ์ด์ง๋ง, ์ด ๊ธฐ๋ฅ๋ค์ React ๊ฐ๋ฐ์๋ค์ด ์ํ์ ์ปจํ
์คํธ์ ๋ํด ๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ํ ์ ์๋ ๋ฏธ๋๋ฅผ ์ฟ๋ณผ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ด๋ ๋ ๋ชจ๋ํ๋๊ณ , ํ
์คํธ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ์ด์ด์ง ๊ฒ์
๋๋ค. React ํ์ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๊ณ์ ํ์ํ๊ณ ๊ฐ์ ํ๊ณ ์์ผ๋ฉฐ, ์์ผ๋ก ๋ช ๋
์์ ํฌ๊ฒ ๋ฐ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ด ์ฑ์ํด์ง์ ๋ฐ๋ผ, React ์ปค๋ฎค๋ํฐ๊ฐ ์ด๋ฅผ ์คํํ๊ณ , ๊ฒฝํ์ ๊ณต์ ํ๋ฉฐ, React ํ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํจ๊ป ํ๋ ฅํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ React์ ์ค์ฝํ ๊ด๋ฆฌ์ ๋ฏธ๋๋ฅผ ๋ง๋ค์ด๊ฐ๊ณ ๋ ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
React์ ์คํ์ ๊ธฐ๋ฅ์ธ `experimental_use`์ <Scope>๋ ๋ ๋ช
์์ ์ด๊ณ ์ ์ด๋ ์ค์ฝํ ๊ด๋ฆฌ์ ๋ํ ํฅ๋ฏธ๋ก์ด ํ๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์ฌ ์คํ์ ์ด๋ฉฐ ๊ด๋ จ ์ํ์ ์๋ฐํ์ง๋ง, ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ปดํฌ๋ํธ ๊ฒฉ๋ฆฌ, ์ฌ์ฌ์ฉ์ฑ ๋ฐ ํ
์คํธ ์ฉ์ด์ฑ์ ๋ํ ์ ์ฌ์ ์ธ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ํ๋ก๋์
์ฝ๋์ ํตํฉํ๊ธฐ ์ ์ ์คํ์ ์ธ ์ฑ๊ฒฉ๊ณผ ๋ณต์ก์ฑ์ ๋ํ ์ฅ์ ์ ๋น๊ต ํ๊ฐํ์ธ์. ์ด๋ฌํ API๊ฐ ์ฑ์ํด์ง์ ๋ฐ๋ผ ํฅํ React ์
๋ฐ์ดํธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ํ์ธํ์ธ์.
์คํ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ ์ React ์ํ ๊ด๋ฆฌ์ ์ปจํ ์คํธ์ ํต์ฌ ์์น์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ง์คํฐํ๊ณ ์ฅ๋จ์ ์ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ฝํ๋ฅผ ๊ฐ์ฅ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค.