์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ์ฑ
- ์ ๋ฆฌํธ๋ฆฌํธ
- html
- ์ํ์ฃผ
- ๋ฐ์ํ
- JavaScript
- ํ์ด์ฌ
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ฐฐ์์ ๋ฐฐ์
- ์ค๋ผํด
- ์ํ
- ์ฝ๋ฉ
- ์ค๋ธ์
- ๋ ์
- ๋๊ฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์นดํ๋๊ฐ
- ์๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- css
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ๋ก๊ทธ๋๋ฐ
- Python
- ๊ฐ๋ฐ
- Java
- ์๋ฐ์คํฌ๋ฆฝํธ
- database
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- Today
- Total
JiYoung Dev ๐ฅ
Frontend Fundemental (ํ ์ค, ํ๋ก ํธ์๋ ์ข์ ์ฝ๋ ์์ฑํ๊ธฐ) ์ ๋ฆฌ ๋ณธ๋ฌธ
Frontend Fundemental (ํ ์ค, ํ๋ก ํธ์๋ ์ข์ ์ฝ๋ ์์ฑํ๊ธฐ) ์ ๋ฆฌ
Shinjio 2025. 1. 16. 00:14
๊ตฌ๋ ์ค์ธ ์ ํ๋ฒ๊ฐ ํ๋์ ์์์ ์๋กญ๊ฒ ์ฌ๋ ธ๋๋ฐ, ํ ์ค์์ ์์ฑํ Frontend Fundemental์ ์๊ฐํ๋ ์์์ด์๋ค. Frontend Fundemental์ Toss ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ข์ ํ๋ก ํธ์๋ ์ฝ๋์ ๊ธฐ์ค์ ์์ ๋ค์ ๊ธฐ์ค์ ๋ง์ถฐ ์์ฑํ ๋ฌธ์์ด๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ฉด์ ๋ค์ํ ์์ค๋ฅผ ๋ณด์ง ๋ชปํด ์ด๋ค ์ฝ๋๊ฐ ์ข์ ์ฝ๋์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ ์๊ฐ์ ํ๋๋ฐ ์ด ๋ฌธ์๋ฅผ ์ ๋ ํ์ฌ ์ข์ ์ฝ๋๋ ๋ฌด์์ธ์ง ์ฝ์ด๋ณด๊ณ ํ์ฌ ๋์ ์ฝ๋๋ ์ด๋ค์ง ๋์๋ณด๊ณ ๋๋ง์ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์๊ฐ์ ์ ๋ฆฌํด๋ณด๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์ ํ๋ค.
Frontend Fundemental์์ ์ ์ํ ์ข์ ์ฝ๋์ 4๊ฐ์ง ์์น์ ์๋์ ๊ฐ๋ค. ํด๋น ์์น์ ๊ฒฐ๊ตญ “๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ์ฝ๋”๋ผ๋ ์๊ฐ์์ ๋์จ๋ค. ์๋ก์ด ์๊ตฌ์ฌํญ์ด ๋ฐ์ํ์ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ฐฐํฌํ๊ธฐ ์์ํ ์ฝ๋๊ฐ ์ข์ ์ฝ๋์ด๋ค. “๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ์ฝ๋”์ ๊ธฐ์ค์ ์๋ 4๊ฐ์ง ๊ธฐ์ค์ผ๋ก ํ๋จํ๋ ๊ฒ์ด๋ค.
- ๊ฐ๋
์ฑ(Readability)
- ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋
- ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ฐ์ ์ฝ๋๊ฐ ์ด๋ค ๋์์ ํ๋์ง ์ฝ๊ฒ ์ดํดํ ์ ์์ด์ผ ํ๋ค.
- ์ฝ๊ธฐ ์ข์ ์ฝ๋๋ ์ฝ๋ ์ฌ๋์ด ํ ๋ฒ์ ๋จธ๋ฆฟ์์์ ๊ณ ๋ คํ๋ ๋งฅ๋ฝ์ด ์ ๊ณ , ์์์ ์๋๋ก ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ง๋ค.
- ์์ธก ๊ฐ๋ฅ์ฑ(Predictability)
- ํ์ ํ๋ ๋๋ฃ๋ค์ด ํจ์๋ ์ปดํฌ๋ํธ์ ๋์์ ์ผ๋ง๋ ์์ธกํ ์ ์๋์ง
- ์์ธก ๊ฐ๋ฅ์ฑ์ด ๋์ ์ฝ๋๋ ์ผ๊ด์ ์ธ ๊ท์น์ ๋ฐ๋ฅด๊ณ , ํจ์๋ ์ปดํฌ๋ํธ์ ์ด๋ฆ๊ณผ ํ๋ผ๋ฏธํฐ, ๋ฐํ๊ฐ๋ง ๋ณด๊ณ ๋ ์ด๋ค ๋์์ ํ๋์ง ์ ์ ์๋ค.
- ์์ง๋(Cohesion)
- ์์ ๋์ด์ผ ํ ์ฝ๋๊ฐ ํญ์ ๊ฐ์ด ์์ ๋๋๊ฐ
- ์ฝ๋์ ํ ๋ถ๋ถ์ ์์ ํด๋ ์๋์น ์๊ฒ ๋ค๋ฅธ ๋ถ๋ถ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ์ฝ๋
- ๊ฐ๋ ์ฑ๊ณผ ์์ง๋๋ ์๋ก ์์ถฉํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ง๋๋ฅผ ๋์ด๊ธฐ ์ํด์๋ ๋ณ์๋ ํจ์๋ฅผ ์ถ์ํํ๋ ๋ฑ ๊ฐ๋ ์ฑ์ ๋จ์ดํธ๋ฆฌ๋ ๊ฒฐ์ ์ ํด์ผ ํ๋ค. ํจ๊ป ์์ ๋์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์ง๋๋ฅผ ์ฐ์ ํ๊ณ , ์ถ์ํํ๊ณ , ์ํ์ฑ์ด ๋์ง ์์ ๊ฒฝ์ฐ์๋ ๊ฐ๋ ์ฑ์ ์ฐ์ ํ์ฌ ์ฝ๋ ์ค๋ณต์ ํ์ฉํ๋ค.
- ๊ฒฐํฉ๋(Coupling)
- ์ฝ๋๋ฅผ ์์ ํ์ ๋์ ์ํฅ๋ฒ์
- ์ฝ๋๋ฅผ ์์ ํ์ ๋ ์ํฅ๋ฒ์๊ฐ ์ ์ด์, ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ฒ์๋ฅผ ์์ธกํ ์ ์๋ ์ฝ
์์ 4๊ฐ์ง ์์น ์ค ๋ช ๊ฐ์ง๋ ํด๋ฆฐ์ฝ๋๋ ์ฌ๋ฌ ๋ค๋ฅธ ๊ด๋ จ ์ฑ ์์ ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. ํด๋น ๋ฌธ์๋ ์์ 4๊ฐ์ง ์์น์ ๋ํ์ฌ ์ด๋ป๊ฒ ํด๋น ์์น์ ๋ฐ๋ผ ์ข์ ์ฝ๋๋ฅผ ๋ง๋ค ๊ฒ์ธ์ง ์์ธํ๊ฒ ์๋ ค์ค๋ค.
1. ๊ฐ๋ ์ฑ
๋งฅ๋ฝ ์ค์ด๊ธฐ
A. ๊ฐ์ด ์คํ๋์ง ์๋ ์ฝ๋ ๋ถ๋ฆฌํ๊ธฐ
- ๋์์ ์คํ๋์ง ์๋ ์ฝ๋๊ฐ ํ๋์ ํจ์ ๋๋ ์ปดํฌ๋ํธ์ ์์ผ๋ฉด, ๋์์ ํ๋์ ํ์ ํ๊ธฐ ์ด๋ ต๋ค.
- ํ๋์ ์ปดํฌ๋ํธ๋ ํ๋์ ๋ถ๊ธฐ๋ง ๊ด๋ฆฌํ๋ค.
B. ๊ตฌํ ์์ธ ์ถ์ํํ๊ธฐ
- Wrapper ์ปดํฌ๋ํธ ์ฌ์ฉ
- HOC(Higher-Order Component) ์ฌ์ฉ
- ์ถ์ํ
C. ๋ก์ง ์ข ๋ฅ์ ๋ฐ๋ผ ํฉ์ณ์ง ํจ์ ์ชผ๊ฐ๊ธฐ
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ํ, API ํธ์ถ๊ณผ ๊ฐ์ ๋ก์ง์ ์ข ๋ฅ์ ๋ฐ๋ผ ํจ์๋ ์ปดํฌ๋ํธ, Hook์ ๋๋์ง ๋ง ๊ฒ
- ์ข์ ์ฑ๋ฅ์ ์ํด์๋ ํน์ ํ ์ํ ๊ฐ์ด ์
๋ฐ์ดํธ๋์์ ๋ ์ต์ํ์ ๋ถ๋ถ์ด ๋ฆฌ๋ ๋๋ง๋๋๋ก ์ค๊ณํด์ผ ํ๋ค.
- → ํ๋ผ๋ฏธํฐ๋ณ๋ก ๋ณ๋์ Hook ์์ฑ
์ด๋ฆ ๋ถ์ด๊ธฐ
A. ๋ณต์กํ ์กฐ๊ฑด์ ์ด๋ฆ ๋ถ์ด๊ธฐ
- ๋ณต์กํ ์กฐ๊ฑด์์ด ํน๋ณํ ์ด๋ฆ ์์ด ์ฌ์ฉ๋๋ฉด, ์กฐ๊ฑด์ด ๋ปํ๋ ๋ฐ๋ฅผ ํ๋์ ํ์ ํ๊ธฐ ์ด๋ ต๋ค.
- ๋ฐ๋ผ์ ์กฐ๊ฑด์ ๋ช ์์ ์ธ ์ด๋ฆ์ ๋ถ์ด๋ฉด, ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ํ ๋ฒ์ ๊ณ ๋ คํด์ผ ํ ๋งฅ๋ฝ์ ์ค์ผ ์ ์๋ค.
**<์กฐ๊ฑด์์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ธฐ์ค>**
**์กฐ๊ฑด์์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ด ์ข์ ๋**
1. ๋ณต์กํ ๋ก์ง์ ๋ค๋ฃฐ ๋
- ์กฐ๊ฑด๋ฌธ์ด๋ ํจ์์์ ๋ณต์กํ ๋ก์ง์ด ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์ฒ๋ฆฌ๋๋ฉด, ์ด๋ฆ์ ๋ถ์ฌ ํจ์์ ์ญํ ์ ๋ช
ํํ ๋๋ฌ๋ด๋ ๊ฒ์ด ์ข๋ค.
2. ์ฌ์ฌ์ฉ์ฑ์ด ํ์ํ ๋
- ๋์ผํ ๋ก์ง์ ์ฌ๋ฌ ๊ณณ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด, ๋ณ์๋ ํจ์๋ฅผ ์ ์ธํด ์ฌ์ฌ์ฉํ ์ ์๋ค.
3. ๋จ์ ํ
์คํธ๊ฐ ํ์ํ ๋
- ํจ์๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋
๋ฆฝ์ ์ผ๋ก ๋จ์ ํ
์คํธ๋ฅผ ์์ฑํ ์ ์๋ค.
**์กฐ๊ฑด์ ์ด๋ฆ์ ๋ถ์ด์ง ์์๋ ๊ด์ฐฎ์ ๋**
1. ๋ก์ง์ด ๊ฐ๋จํ ๋
2. ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ฉฐ ๋ก์ง์ด ๋ณต์กํ์ง ์์ ๋
B. ๋งค์ง ๋๋ฒ์ ์ด๋ฆ ๋ถ์ด๊ธฐ
- ๋งค์ง ๋๋ฒ(Magic Number)๋ ์ ํํ ๋ป์ ๋ฐํ์ง ์๊ณ ์์ค ์ฝ๋ ์์ ์ง์ ์ซ์ ๊ฐ์ ๋ฃ๋ ๊ฒ
- ์์ ์ ์ธ์ ํตํด ๋งค์ง ๋๋ฒ์ ์ด๋ฆ ๋ถ์ด๊ธฐ
์์์ ์๋๋ก ์ฝํ๊ฒ ํ๊ธฐ
A. ์์ ์ด๋ ์ค์ด๊ธฐ
- ์ฝ๋๋ฅผ ์ฝ์ ๋ ์ฝ๋์ ์์๋๋ฅผ ์๋ค๊ฐ๋ค ํ๋ฉด์ ์ฝ๊ฑฐ๋, ์ฌ๋ฌ ํ์ผ์ด๋ ํจ์, ๋ณ์๋ฅผ ๋๋๋ค๋ฉด์ ์ฝ๋ ๊ฒ
- ์ฝ๋๋ฅผ ์์์ ์๋์, ํ๋์ ํจ์๋ ํ์ผ์์ ์ฝ์ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ์ฝ๋ ์ฌ๋์ด ๋์์ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๋ค.
B. ์ผํญ ์ฐ์ฐ์ ๋จ์ํ๊ฒ ํ๊ธฐ
- if๋ฌธ์ผ๋ก ํ์ด์ ์ฌ์ฉ
2. ์์ธก ๊ฐ๋ฅ์ฑ
A. ์ด๋ฆ ๊ฒน์น์ง ์๊ฒ ๊ด๋ฆฌํ๊ธฐ
- ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง๋ ํจ์๋ ๋ณ์๋ ๋์ผํ ๋์์ ํด์ผ ํ๋ค.
B. ๊ฐ์ ์ข ๋ฅ์ ํจ์๋ ๋ฐํ ํ์ ํต์ผํ๊ธฐ
- API ํธ์ถ๊ณผ ๊ด๋ จ๋ Hook๋ค์ฒ๋ผ ๊ฐ์ ์ข ๋ฅ์ ํจ์๋ Hook์ด ์๋ก ๋ค๋ฅธ ๋ฐํ ํ์ ์ ๊ฐ์ง๋ฉด ์ฝ๋์ ์ผ๊ด์ฑ์ด ๋จ์ด์ง๋ค.
- ์๋ฒ API๋ฅผ ํธ์ถํ๋ Hook์ ๋ฐํ ํ์ ์ด ์๋ก ๋ค๋ฅด๋ค๋ฉด, ๋๋ฃ๋ค์ Hook์ ์ธ ๋๋ง๋ค ๋ฐํ ํ์ ์ด ๋ฌด์์ธ์ง ํ์ธํด์ผ ํ๋ค.
- ์ ํจ์ฑ ๊ฒ์ฌ ํจ์์ ๋ฐํ ๊ฐ์ด ๋ค๋ฅด๋ฉด, ์์ ๋์ผํ๊ฒ ๋๋ฃ๋ค์ ํจ์๋ฅผ ์ธ ๋๋ง๋ค ๋ฐํ ํ์ ์ ํ์ธํด์ผ ํ๋ค.
C. ์จ์ ๋ก์ง ๋๋ฌ๋ด๊ธฐ
- ํจ์๋ ์ปดํฌ๋ํธ์ ์ด๋ฆ, ํ๋ผ๋ฏธํฐ, ๋ฐํ ๊ฐ์ ๋๋ฌ๋์ง ์๋ ์จ์ ๋ก์ง์ด ์์ผ๋ฉด ํ์ ํ๋ ๋๋ฃ๋ค์ด ๋์์ ์์ธกํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ ์ ์์
3. ์์ง๋
A. ํจ๊ป ์์ ๋๋ ํ์ผ์ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ๋๊ธฐ
- ํจ๊ป ์์ ๋๋ ์์ค ํ์ผ์ ํ๋์ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ๋ฉด ์ฝ๋์ ์์กด ๊ด๊ณ๋ฅผ ๋ช ํํ๊ฒ ๋๋ฌ๋ผ ์ ์๋ค.
- ํจ๊ป ์์ ๋๋ ์ฝ๋ ํ์ผ์ ํ๋์ ๋๋ ํ ๋ฆฌ ์๋์ ๋๋ค๋ฉด, ์ฝ๋ ์ฌ์ด์ ์์กด ๊ด๊ณ๋ฅผ ํ์ ํ๊ธฐ ์ฝ๋ค.
โโ src
โ // ์ ์ฒด ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ ์ฝ๋
โโ components
โโ containers
โโ hooks
โโ utils
โโ ...
โ
โโ domains
โ // Domain1์์๋ง ์ฌ์ฉ๋๋ ์ฝ๋
โโ Domain1
โ โโ components
โ โโ containers
โ โโ hooks
โ โโ utils
โ โโ ...
โ
โ // Domain2์์๋ง ์ฌ์ฉ๋๋ ์ฝ๋
โโ Domain2
โโ components
โโ containers
โโ hooks
โโ utils
โโ ...
B. ๋งค์ง ๋๋ฒ ์์ ๊ธฐ
- ์ซ์์ ์๋ฏธ๋ฅผ ๋ช ํํ ํ์ํ๊ธฐ ์ํด ์์๋ก ์ ์ธํ๋ค.
C. ํผ์ ์์ง๋ ์๊ฐํ๊ธฐ
ํ๋ ๋จ์ ์์ง๋
- ํ๋ ๋จ์ ์์ง์ ๊ฐ๋ณ ์ ๋ ฅ ์์๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
- ๊ฐ ํ๋๊ฐ ๊ณ ์ ์ ๊ฒ์ฆ ๋ก์ง์ ๊ฐ์ง๋ฏ๋ก ๋ณ๊ฒฝ์ด ํ์ํ ๋ฒ์๊ฐ ์ค์ด๋ค์ด ํน์ ํ๋์ ์ ์ง๋ณด์๊ฐ ์ฌ์ด์ง๋ค.
ํผ ์ ์ฒด ๋จ์ ์์ง๋
- ํผ ์ ์ฒด ์์ง์ ๋ชจ๋ ํ๋์ ๊ฒ์ฆ ๋ก์ง์ด ํผ์ ์ข ์๋๋ ๋ฐฉ์์ด๋ค.
- ํผ ์ ์ฒด์์์ ํ๋ฆ์ ๊ณ ๋ คํ์ฌ ์ค๊ณ๋๋ฉฐ, ๋ณ๊ฒฝ ๋จ์๊ฐ ํผ ๋จ์๋ก ๋ฐ์ํ ๋ ๋ก๊ฒจํ๋ค.
- ํผ ์ ์ฒด ์์ง๋๋ฅผ ๋์ด๋ฉด, ํผ ์ ์ฒด์ ๊ฒ์ฆ์ด ํ ๊ณณ์์ ๊ด๋ฆฌ๋์ด ๋ก์ง์ด ๊ฐ๊ฒฐํด์ง๊ณ , ์ํ๊ฐ ์ค์์ง์ค์์ผ๋ก ๊ด๋ฆฌ๋๋ฏ๋ก ํผ ์ ์ฒด ํ๋ฆ์ ์ดํดํ๊ธฐ ์ฌ์ด์ง๋ค.
- ํ๋ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ฏ๋ก ํผ์ ์ฌ์ฌ์ฉ์ฑ์ ๋จ์ด์ง ์ ์๋ค.
ํ๋ ๋จ์ vs ํผ ์ ์ฒด ๋จ์ ์์ง๋
- ํ๋ ๋จ์ ์์ง๋๋ฅผ ์ ํํ๋ฉด ์ข์ ๋
- ๋
๋ฆฝ์ ์ธ ๊ฒ์ฆ์ด ํ์ํ ๋
- ํ๋๋ณ๋ก ๋ณต์กํ ๊ฒ์ฆ ๋ก์ง์ด ํ์ํ๊ฑฐ๋ ๋น๋๊ธฐ ๊ฒ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ
- ์ด๋ฉ์ผ ํ์ ๊ฒ์ฌ, ์ ํ๋ฒํธ ์ ํจ์ฑ ๊ฒ์ฆ, ์์ด๋ ์ค๋ณต ํ์ธ, ์ถ์ฒ ์ฝ๋ ์ ํจ์ฑ ํ์ธ์ฒ๋ผ ๊ฐ ํ๋๊ฐ ๋ ๋ฆฝ์ ์ด๊ณ ๊ณ ์ ํ ๊ฒ์ฆ์ด ํ์ํ ๋ ์ ์ฉ
- ์ฌ์ฌ์ฉ์ด ํ์ํ ๋
- ํ๋์ ๊ฒ์ฆ ๋ก์ง์ด ๋ค๋ฅธ ํผ์์๋ ๋์ผํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ ๊ฒฝ์ฐ
- ๋
๋ฆฝ์ ์ธ ๊ฒ์ฆ์ด ํ์ํ ๋
- ํผ ์ ์ฒด ๋จ์ ์์ง๋๋ฅผ ์ ํํ๋ฉด ์ข์ ๋
- ๋จ์ผ ๊ธฐ๋ฅ์ ๋ํ๋ผ ๋
- ๋ชจ๋ ํ๋๊ฐ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ํ๋์ ์๊ฒฐ๋ ๊ธฐ๋ฅ์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ
- ๊ฒฐ์ ์ ๋ณด๋ ๋ฐฐ์ก ์ ๋ณด์ฒ๋ผ ๋ชจ๋ ํ๋๊ฐ ํ๋์ ๋น์ฆ๋์ค ๋ก์ง์ ์ด๋ฃฐ ๋ ์ ์ฉ
- ๋จ๊ณ๋ณ ์
๋ ฅ์ด ํ์ํ ๋
- Wizard Form๊ณผ ๊ฐ์ด ์คํ ๋ณ๋ก ๋์ํ๋ ๋ณต์กํ ํผ์ ๊ฒฝ์ฐ
- ํ์๊ฐ์ ์ด๋ ์ค๋ฌธ์กฐ์ฌ์ฒ๋ผ ์ด์ ๋จ๊ณ์ ์ ๋ ฅ๊ฐ์ด ๋ค์ ๋จ๊ณ์ ์ํฅ์ ์ฃผ๋ ๊ฒฝ์ฐ
- ํ๋ ๊ฐ ์์กด์ฑ์ด ์์ ๋
- ์ฌ๋ฌ ํ๋๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ์ํฅ์ ์ฃผ๋ ๊ฒฝ์ฐ
- ๋น๋ฐ๋ฒํธ ํ์ธ์ด๋ ์ด์ก ๊ณ์ฐ์ฒ๋ผ ํ๋ ๊ฐ ์ํธ์์ฉ์ด ํ์ํ ๊ฒฝ์ฐ
- ๋จ์ผ ๊ธฐ๋ฅ์ ๋ํ๋ผ ๋
4. ๊ฒฐํฉ๋
A. ์ฑ ์์ ํ๋์ฉ ๊ด๋ฆฌํ๊ธฐ
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ํ, API ํธ์ถ๊ณผ ๊ฐ์ ๋ก์ง์ ์ข ๋ฅ์ ๋ฐ๋ผ์ ํจ์๋ ์ปดํฌ๋ํธ, Hook์ ๋๋์ง ๋ง ๊ฒ
B. ์ค๋ณต ์ฝ๋ ํ์ฉํ๊ธฐ
- ๋ค์ ๋ฐ๋ณต๋์ด ๋ณด์ด๋ ์ฝ๋์ผ์ง ๋ชฐ๋ผ๋, ์ค๋ณต ์ฝ๋๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ข์ ๋ฐฉํฅ์ผ ์ ์๋ค.
C. Props Drilling ์ง์ฐ๊ธฐ
- Props Drilling์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ ์ฌ์ด์ ๊ฒฐํฉ๋๊ฐ ์๊ฒผ๋ค๋ ๊ฒ์ ๋ํ๋ด๋ ๋ช ํํ ํ์์ด๋ค.
- ๋ง์ฝ Drilling๋๋ ํ๋กญ์ด ๋ณ๊ฒฝ๋๋ฉด, ํ๋กญ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
- ์กฐํฉ(Composition) ํจํด์ ํ์ฉํด Props Drilling์ ์ ๊ฑฐํ๋ค.
๊ธฐํ. ๋์๋ ์ ๋ณด
1. ์์ฑ ์ ๊ทผ์
- ๊ฐ์ฒด ๋ค์ [] ๋๊ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ดํธ ์์ ๋ค์ด์๋ ๊ฐ์ ํค๋ก ์ฌ์ฉํ์ฌ ํด๋น ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ ธ์ฌ ์ ์์
function Page() {
const user = useUser();
const policy = {
admin: { canInvite: true, canRead: true },
viewer: { canInvite: false, canRead: true },
}[user.role];
return (
<div>
<Button disabled={!policy.canInvite}>Invite</Button>
<Button disabled={!policy.canRead}>Read</Button>
</div>
);
}
2. ์กฐํฉ ํจํด
- ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฐ์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด, ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ ์ค๊ณ ๋ฐฉ์
function ItemEditModal({ open, items, recommendedItems, onConfirm, onClose }) {
const [keyword, setKeyword] = useState("");
return (
<Modal open={open} onClose={onClose}>
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
<Input
value={keyword}
onChange={(e) => onKeywordChange(e.target.value)}
/>
<Button onClick={onClose}>๋ซ๊ธฐ</Button>
</div>
<ItemEditList
keyword={keyword}
items={items}
recommendedItems={recommendedItems}
onConfirm={onConfirm}
/>
</Modal>
);
}
ํด๋น ๊ธ์ ์ฝ์ผ๋ฉฐ, ํ์ฌ ๋ด๊ฐ ์์ฑํ๊ณ ์๋ ์ฝ๋์ ์์ข์ ์ฝ๋ ์์๋ก ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์ผ๋ง๋ ๋ง์์ง..
Props Drilling์ด๋ ๋งค์ง๋๋ฒ ๊ทธ๋ฆฌ๊ณ ํ์ผ ๊ตฌ์กฐ๋ ์ฝ๋ฉ์ ํ๋ฉด์ ๊ต์ฅํ ๋ถํธํ๋ค๊ณ ๋๊ผ๋๋ฐ ์ฒ์ฒํ ๋ฆฌํฉํ ๋ง์ ํ๋ ์๊ฐ์ ๊ฐ์ ธ์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
๊ธ์ ์์ด ๋ง์ง ์์์ ๋จ์๊ฐ์ ์ฝ์ ์ ์์๋๋ฐ ์ด์ ๋ถํฐ ์ฝ๋ฉ์ ํ ๋ ์ค๋ ๋ดค๋ ๋ด์ฉ๋ค์ ๋๊ณ ๋๊ณ ์๊ธฐ์ํค๋ฉด์ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.
'Study > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Javascript Call Stack, Callback Queue, Event Loop (2) | 2024.11.29 |
---|---|
Webpack: ๊ฐ๋ ๊ณผ ์ค์ (0) | 2024.11.27 |
[React] ๋๋๊ทธ ์ค ๋๋กญ ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ (1) | 2024.11.05 |
[React] Spring Boot์ ์ฐ๋ํ์ฌ shop ๋ง๋ค๊ธฐ (2023.06.09) (0) | 2023.06.09 |
[React] ๊ฐ๋ฐ ์ฐธ๊ณ ์ฌ์ดํธ ๋ฐ ํ ํ๋ฆฟ ์ ์ฉํ๋ ๋ฒ (2023.06.09) (0) | 2023.06.09 |