์์๋๋ฉด ์ ์ฉํ โ๋ฆฌ์กํธโ ๊ฐ๋ ๊ณผ ์ฑ๋ฅ ์ต์ ํ ํ
์์๋๋ฉด ์ ์ฉํ โ๋ฆฌ์กํธโ ๊ฐ๋ ๊ณผ ์ฑ๋ฅ ์ต์ ํ ํ ๊ด๋ จ
๋ฆฌ์กํธ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ๊ฐ์ DOM ๋ฑ์ ๊ฐ๋ ์ ๋์ ํ์์ผ๋ฉฐ, ์ฌ๋ฌ ๊ธ๋ก๋ฒ ๊ธฐ์ ์ด ๋ฆฌ์กํธ๋ฅผ ํ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ฆฌ์กํธ์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด์๋ ๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๊ณ ์ ์ ํ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ์ ์ ์ฉํด์ผ ํฉ๋๋ค. ์ด์ ๋ณธ ๊ธ์์๋ ๋ฆฌ์กํธ ๊ฐ๋ฐ ์ ์์์ผ ํ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ๋ฆฌํด ๋ณด๊ณ , ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ํ , ๊ฐ๋ฐ์ ๋๊ตฌ ๋ฐ ์ฑ๋ฅ ์ต์ ํ ํ์ ์ดํด๋ณด๊ณ ์ ํฉ๋๋ค.
๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ๊ฐ๋
1) ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ ๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋์ด๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์กํ UI๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์๋ก ๋ถํ ํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ปดํฌ๋ํธ๋ ์์ฒด์ ์ผ๋ก ์ํ์ ์์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํฉ๋๋ค. ๊ฐ ์ปดํฌ๋ํธ๋ ํน์ ๊ธฐ๋ฅ์ด๋ UI์ ํ ๋ถ๋ถ์ ์ฑ ์์ง๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐ์ ์ง์คํ ์ ์์ต๋๋ค. ๋ํ UI๋ฅผ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์กฐํํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ ๋๋ ๊ตฌ์ฑ ์์ ๊ฐ์ ์์กด์ฑ์ ์ต์ํํ๊ณ , ๊ฐ ์ปดํฌ๋ํธ๋ ํ ๊ฐ์ง ์ฑ ์๋ง ์ง๋ค๋ ๋จ์ผ ์ฑ ์ ์์น์ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค. ์ฆ, ์ปดํฌ๋ํธ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ผ ํฉ๋๋ค. ์์ธ๋ฌ, ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์ปดํฌ๋ํธ ์์ฑ๊ณผ ๋ฐํ๊ฐ(return)์ ์ผ๊ด๋๊ฒ ์์ฑํด์ผ ํฉ๋๋ค.
2) JSX ๋ฌธ๋ฒ
๋ฆฌ์กํธ์์๋ JSX(JavaScript XML) ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ผ๋ก HTML๊ณผ ์ ์ฌํ ํํ์ด๋ฉฐ, ์ปดํฌ๋ํธ ๋ ๋๋ง ๋ก์ง๊ณผ ๋งํฌ์ ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. JSX๋ฅผ ์์ฑํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
- ๋ชจ๋ ํ๊ทธ๋ ๋ฐ๋์ ๋ซํ ์์ด์ผ ํจ (์์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ self-closing ์ฌ์ฉ)
- ์ต์์ ์์๋ ํ๋์ฌ์ผ ํจ (์ฌ๋ฌ ์์๋ฅผ ๋ฐํํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ Fragment(
<>``</>
) ์ฌ์ฉ) - ์นด๋ฉ ์ผ์ด์ค(camelCase) ์์ฑ๋ช ์ฌ์ฉ
- ์ค๊ดํธ(
{ }
)๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ฌ์ฉ - ์กฐ๊ฑด๋ถ ๋ ๋๋ง์
if
๋๋ ์ผํญ ์ฐ์ฐ์ ์ฌ์ฉ - ์ธ๋ผ์ธ ์คํ์ผ์
style={{ }}
์ ์ฉ - ์ฃผ์ ์์ฑ์ {
/* โฆ */
} ์ฌ์ฉ
3) ๊ฐ์ DOM(Virtual DOM)
๊ฐ์ DOM(Document Object Model)์ ์ค์ DOM์ ์ถ์ํํ DOM์ ๋งํฉ๋๋ค. ๋ฆฌ์กํธ์์๋ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง ๋ ๋ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ์ดํ ์ํ๋ ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ๋น๊ต(Diffing)์ ์กฐ์ (Reconciliation) ์ ์ฐจ๋ฅผ ํตํด ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ๋ฐ์(Patch)ํฉ๋๋ค. ๋ฆฌ์กํธ๋ ์ด๋ ๊ฒ ๊ฐ์ DOM์ ์ด์ฉํ์ฌ ๋ถํ์ํ DOM ์กฐ์์ ์ต์ํํฉ๋๋ค.
![๊ฐ์ DOM ๋์ ๋ฐฉ์
<์ถ์ฒ: ๋ฏธ๋์ (resul.dilek
)>](https://yozm.wishket.com/media/news/2688/1__1_.jpeg
4) Props์ State
Props์ State๋ ์์ฑ๊ณผ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ฐ๋ ์ ๋๋ค. Props๋ Properties์ ์ฝ์๋ก ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋งํฉ๋๋ค. Props๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ธฐ ์ ์ฉ(read-only)์ด๋ฉฐ, ์์ ์ปดํฌ๋ํธ์์ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
State๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋งํฉ๋๋ค. ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ง์ ์์ ํ ์ ์์ผ๋ฉฐ, State๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๋ ์๋์ผ๋ก ๋ค์ ๋ ๋๋ง(Re-rendering)๋ฉ๋๋ค. ๋ฆฌ์กํธ์์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก State๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ์ค์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ด useState๋ผ๋ ๋ฆฌ์กํธ ํ (React Hook)์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฆฌ์กํธ ํ (React Hooks)์ ํ์ฉ
1) ๋ฆฌ์กํธ ํ ์ด๋?
๋ฆฌ์กํธ ํ
์ ๋ฆฌ์กํธ 16.8 ๋ฒ์ ๋ถํฐ ๋์
๋์์ผ๋ฉฐ, ์ปดํฌ๋ํธ ๋ด์์ ๋ค์ํ ๋ฆฌ์กํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์ผ์ข
์ ํจ์ API์
๋๋ค. ํ
์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ๋ก์ง์ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ ๋ฟ๋ง ์๋๋ผ, ์ปดํฌ๋ํธ ๊ฐ์ ์ํ๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฑ์ ์ญํ ์ ์ํํ ์ ์์ต๋๋ค. ๋ฆฌ์กํธ์์ ์ ๊ณตํ๋ ํ
์๋ ๋ค์ํ ์ข
๋ฅ๊ฐ ์์ผ๋ฉฐ, ๋ํ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ํ
์ผ๋ก๋ useState
, useRef
, useEffect
, useMemo
, useReducer
๋ฑ์ด ์์ต๋๋ค.
2) ๋ฆฌ์กํธ ํ ์ฌ์ฉ ์์
1. useState
useState๋ ์ปดํฌ๋ํธ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ
์
๋๋ค. useState
๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ ๊ฐ๊ณผ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ํจ์๋ฅผ ๋ฐ์ต๋๋ค. ์๋ ์์ ์์๋ useState
๋ก count๋ผ๋ ์ํ ๊ฐ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ์ setCount
๋ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ํจ์์
๋๋ค. useState(0)
๋ ์ด๊ธฐ ์ํ ๊ฐ์ 0์ผ๋ก ์ค์ ํ ๊ฒ์
๋๋ค. ์ด ์ปดํฌ๋ํธ์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด setCount
๋ฅผ ํตํด count ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ , ํด๋น ์ปดํฌ๋ํธ๋ ๋ค์ ๋ ๋๋ง๋ฉ๋๋ค.
2. useRef
**
useRef
๋ ์ปดํฌ๋ํธ ๋ด์์ ํน์ ๊ฐ์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ ์ ์๊ฒ ํด์ค๋๋ค. useRef
๋ก ์์ฑํ ref ๊ฐ์ฒด๋ ์ปดํฌ๋ํธ ์๋ช
์ฃผ๊ธฐ ๋์ ์ ์ง๋๋ฉฐ, ๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋์ง ์์ต๋๋ค. ์ฃผ๋ก DOM ์๋ฆฌ๋จผํธ์ ์ง์ ์ ๊ทผํด์ผ ํ๊ฑฐ๋ ์ด์ ๊ฐ์ ์ ์ฅํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. useRef๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅํ ๊ฐ์ current ์์ฑ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ์๋ ์์ ์์ useRef(null)
๋ ์ด๊ธฐ ๊ฐ์ด null
์ธ ref ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด ref ๊ฐ์ฒด๋ฅผ input ์๋ฆฌ๋จผํธ์ ์ฐ๊ฒฐํ๋ฉด inputEl.current๋ฅผ ํตํด ํด๋น ์๋ฆฌ๋จผํธ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
3. useEffect
useEffect๋ ์ปดํฌ๋ํธ์ Side Effect(๋ถ์ ํจ๊ณผ)๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฆฌ์กํธ ํ ์ ๋๋ค. useEffect๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ํ์ ์คํ๋๋ฉฐ, ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ Side Effect ํจ์์ด๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ ์์กด์ฑ ๋ฐฐ์ด์ ๋๋ค. ์์กด์ฑ ๋ฐฐ์ด์ ํน์ ๊ฐ์ ๋ฃ์ผ๋ฉด ๊ทธ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค Side Effect ํจ์๊ฐ ์คํ๋ฉ๋๋ค. ๋ง์ฝ ์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด๋ก ๋ฃ์ผ๋ฉด, ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋๋ง Side Effect ํจ์๊ฐ ์คํ๋๋ฉฐ, ์์กด์ฑ ๋ฐฐ์ด์ ์๋ตํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์คํ๋ฉ๋๋ค. ์๋ ์์ ์์๋ useEffect์ ์ํด count1 ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค console.log๊ฐ ์ฐํ๊ฒ ๋ฉ๋๋ค.
4. useMemo
useMemo
๋ ๊ณ์ฐ๋์ด ๋ง์ ํจ์์ ๋ฐํ ๊ฐ์ **๋ฉ๋ชจ์ด์ ์ด์
(memoization)**ํ์ฌ ๋ถํ์ํ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํ๋ ๋ฆฌ์กํธ ํ
์
๋๋ค. useMemo
๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ฉ๋ชจ์ด์ ์ด์
ํ ํจ์์ด๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ ์์กด์ฑ ๋ฐฐ์ด์
๋๋ค. useMemo
๋ ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ, ์ด์ ์ ๊ณ์ฐ๋ ๊ฐ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
์์ useEffect
์ฒ๋ผ useMemo
๋ ์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋๋ง ํจ์๊ฐ ์คํ๋๊ณ , ์์กด์ฑ ๋ฐฐ์ด์ ์๋ตํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋ ๋๋ง๋ค ํจ์๊ฐ ์คํ๋ฉ๋๋ค. ์ ์์ ์์๋ useMemo
๋ฅผ ์ฌ์ฉํ์ฌ count
๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง expensiveResult
ํจ์๋ฅผ ์คํํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์ด์ ์ ๊ณ์ฐ๋ ๊ฐ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
5. useReducer
useReducer๋ useState์ ๊ฐ์ด ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ
์
๋๋ค. useState๋ ์ปดํฌ๋ํธ ๋ด์ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ก์ง์ ๋์ด์ผ ํ๋ ๋ฐ๋ฉด, useReducer
๋ ์ํ ์
๋ฐ์ดํธ ๋ก์ง์ ์ปดํฌ๋ํธ ์ธ๋ถ์ ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ค๋ณต๋๋ ์ํ ์
๋ฐ์ดํธ ๋ก์ง์ ํ ๊ณณ์ ๋ชจ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ํนํ ์ฌ๋ฌ ๊ฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๊ฑฐ๋, ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ํฐ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ํ
์
๋๋ค.
์ ์์ ์ฝ๋๋ Counter ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํ useReducer
์ฌ์ฉ ์์์
๋๋ค. useReducer
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Reducer ํจ์์ Dispatch ํจ์๊ฐ ํ์ํฉ๋๋ค. Reducer ํจ์๋ state์ action ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ ์๋ก์ด ์ํ๋ฅผ ๋ฐํํ๋ฉฐ, Dispatch ํจ์๋ action ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ Reducer ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋ฉ๋๋ค.
3) ์ปค์คํ ํ ๋ง๋ค๊ธฐ
์ปค์คํ
ํ
(Custom Hooks)์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ง๋ค์ด ์ฌ์ฉํ๋ ํ
์ ๋งํฉ๋๋ค. ์ปค์คํ
ํ
์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ๊ฐ์ ์ค๋ณต๋๋ ๋ก์ง์ ์ ๊ฑฐํ์ฌ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ปค์คํ
ํ
์ ์์ฑํ ๋๋ use๋ก ์์ํ๋ ํจ์๋ช
์ ์จ์ผ ํ๋ฉฐ, ์ปค์คํ
ํ
๋ด๋ถ์ useState
์ ๊ฐ์ ๋ค๋ฅธ ๋ฆฌ์กํธ ํ
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ์์๋ ์
๋ ฅ ํ๋ ๊ฐ์ ๊ด๋ฆฌํ๋ useInput
์ด๋ผ๋ ์ปค์คํ
ํ
์์์
๋๋ค.
useInput
์ ์ด๊ธฐ๊ฐ(initialValue)์ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก useState๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅ๊ฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ํ handleChange
ํจ์๋ฅผ ์ ๊ณตํ์ฌ ์
๋ ฅ๊ฐ์ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ useInput
์ปค์คํ
ํ
์ ์ผ๋ฐ์ ์ธ ๋ฆฌ์กํธ ํ
์ฒ๋ผ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ์์ ์ฝ๋๋ InputComponent์์ useInput
์ ์ฌ์ฉํ ์์์
๋๋ค.
4) ํ ์ฌ์ฉ ์ ์ฃผ์ ์ฌํญ
๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ ๋๋ ์ปดํฌ๋ํธ๋ ์ปค์คํ ํ ์ ์ต์์ ๋ ๋ฒจ์์๋ง ํธ์ถํด์ผ ํฉ๋๋ค. ์ฆ, ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ๋ด์์๋ ํ ์ ํธ์ถํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ์ต์์ ๋ ๋ฒจ์์๋ง ๋ฆฌ์กํธ ํ ์ ํธ์ถํด์ผ ํ๋ ์ด์ ๋ ๋ฆฌ์กํธ๊ฐ ์ปดํฌ๋ํธ ๋ ๋๋ง ์, ํ ์ด ๋์ผํ ์์๋ก ํธ์ถ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ๋ด์์ ํ ์ ์ฌ์ฉํ๋ฉด ํธ์ถ ์์๊ฐ ์ผ๊ด๋์ง ์์, ๋ฆฌ์กํธ๊ฐ ์ ์์ ์ผ๋ก ๋์ํ์ง ์์ ์ ์์ต๋๋ค.
๋ํ ํ ์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฝ๋์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค๋ ์ ๋ ์ฃผ์ํด์ผ ํฉ๋๋ค. ํ ์ ์ฌ์ฉํ ๋๋ ์ํ์ ๋ก์ง์ ์ ์ ํ ์ถ์ํํ์ฌ, ๋ถํ์ํ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. ์์ธ๋ฌ ์์กด์ฑ ๋ฐฐ์ด์ ์ ํํ ๋ช ์ํ์ฌ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ์ข ๋ฅ์ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ๋ฒ
1) ํด๋์คํ ์ปดํฌ๋ํธ vs ํจ์ํ ์ปดํฌ๋ํธ
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์ข ๋ฅ์๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ์์ต๋๋ค. ํด๋์คํ ์ปดํฌ๋ํธ๋ ES6์ ํด๋์ค ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉฐ, ์ํ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋๋ค. ๋ฐ๋ผ์ ํด๋์คํ ์ปดํฌ๋ํธ๋ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ๋ ๋ณต์กํ ๋ก์ง์ ๊ตฌํํ ๋ ์ฅ์ ์ด ์์ง๋ง, ์์นซ ์ฝ๋๊ฐ ๊ธธ์ด์ ธ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์์ง ์ ์์ต๋๋ค.
๋ฐ๋ฉด, ํจ์ํ ์ปดํฌ๋ํธ๋ ๊ฐ๋จํ ํจ์๋ก ์ ์๋ฉ๋๋ค. ๊ธฐ์กด์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํํ์์ผ๋ก ์ธ ์ ์๊ณ , ES6 ๋ฌธ๋ฒ์ธ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํด์ ์ ์ํ ์๋ ์์ต๋๋ค. ํจ์ํ ์ปดํฌ๋ํธ ์์ฒด๋ก๋ ์ํ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๋ฆฌ์กํธ ํ ์ ํตํด ์ํ๋ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ๋นํด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ , ํ ์คํธ์ ๋๋ฒ๊น ์ด ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ํ์ฌ ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์๋ ํด๋์ค ์ปดํฌ๋ํธ ๋์ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
2) ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ props
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋ณดํต props
๋ฅผ ์ด์ฉํ์ฌ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ํ์ง๋ง, ์ค๋ฌด์์๋ ์์์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๋น๋ก ๋ฆฌ์กํธ์์๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ(one-way data flow)์ ๊ถ์ฅํ๊ณ ์์ง๋ง, ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ props๋ก ์ ๋ฌํ๊ณ , ์์ ์ปดํฌ๋ํธ์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ useCallback
ํ
์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋, ๋ถํ์ํ๊ฒ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด props
๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๋ฌ์ด ๋ณต์กํด์ง๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ฆฌ์กํธ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Context API๋ฅผ ์ด์ฉํ๊ธฐ๋ ํฉ๋๋ค. Context API๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ ์์์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ํ์์ ์ด๋ค ์ปดํฌ๋ํธ์์๋ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค.
์ด๋ฅผ ํตํด props ๋๋ฆด๋ง(drilling)์ด ์์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ๋ํ ๋ฆฌ๋์ค(Redux), ๋ชน์์ค(MobX), ์ฃผ์คํ ๋(Zustand) ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์์ด ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ๋์ฑ ์ฉ์ดํ๊ฒ ํ ์ ์์ต๋๋ค.
๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋๊ตฌ์ ํ๋ ์์ํฌ
1) ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋๊ตฌ
๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋๊ตฌ(React Developer Tools)๋ ๋ฉํ(Meta)์์ ์คํ์์ค๋ก ๊ฐ๋ฐํ ๋๊ตฌ๋ก์, ํฌ๋กฌ ์น ์คํ ์ด์ ํ์ด์ดํญ์ค ์ ๋์จ์์ ๋ค์ด๋ก๋ ๋ฐ์ ์ค์นํ ์ ์๋ ๋ธ๋ผ์ฐ์ ํ์ฅ ๋๊ตฌ์ ๋๋ค. ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ค ์ปดํฌ๋ํธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์์ผ๋ฉฐ, ๊ฐ ์ปดํฌ๋ํธ์ Props์ State๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ด, ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ถ์ ํ๊ณ ๋๋ฒ๊น ํ๋ ๋ฐ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค.
2) ๋ฆฌ์กํธ ํ๋ ์์ํฌ
๋ฆฌ์กํธ๋ก ์ฑ์ด๋ ์น์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ ๋ ๋๋ถ๋ถ ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ๋ฆฌ์กํธ ์์ฒด๋ง์ผ๋ก๋ ์ฝ๋ ๋ถํ ์ด๋ ๋ผ์ฐํ , ๋ฐ์ดํฐ ํจ์นญ ๋ฑ์ ๊ตฌํํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋๊ตฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํ์ง๋ง ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ ์ด๋ฌํ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํ ์๋ฃจ์ ์ ์ ๊ณตํด ์ฃผ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ๋น ๋ฅด๊ฒ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์๋๋ก ํด์ค๋๋ค.
๋ํ์ ์ธ ๋ฆฌ์กํธ ํ๋ ์์ํฌ๋ก๋ Next.js, Remix, Gatsby, Astro ๋ฑ์ด ์์ผ๋ฉฐ, ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐ์ ์ํด์๋ Expo๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์กํธ๋ก ๊ฐ๋ฐํ ๋ ํ๋ก์ ํธ ๊ตฌ์กฐ ์์ฑ๊ณผ ๋ผ์ฐํ , ์บ์ฑ, ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ฆฌ์กํธ ์ฑ๋ฅ ์ต์ ํ ํ
1) ๋ถํ์ํ ๋ ๋๋ง ๋ฐฉ์ง
์ปดํฌ๋ํธ ๋ ๋๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด์๋ ๋จผ์ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํจ์ํ ์ปดํฌ๋ํธ์์ ํน์ props์ ๋ณํ์๋ง ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๊ฒ ํ๋ ค๋ฉด React.memo๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ฐธ๊ณ ๋ก React.memo
๋ ๊ณ ์ฐจ ์ปดํฌ๋ํธ(Higher-Order Component)์
๋๋ค. ๊ณ ์ฐจ ์ปดํฌ๋ํธ๋ ์ปดํฌ๋ํธ๋ฅผ ์ธ์๋ก ๋ฐ์ ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋งํฉ๋๋ค. React.memo
๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ฉ๋ชจ์ด์ ์ด์
๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์์์ ๊ฐ์ด ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ์ ๊ด๋ จ์ด ์๋ count ์ํ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ผ๋, ์์ ์ปดํฌ๋ํธ์ ๋ํ ๋ถํ์ํ ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
์ด์ ๊ฐ์ด React.memo
๋ ํน์ props์ ๋ณ๊ฒฝ์๋ง ๋ ๋๋ง๋๋๋ก ์กฐ๊ฑด์ ์ค์ ํ ์ ์์ต๋๋ค. ๋ค๋ง React.memo
๋ **์์ ๋น๊ต(Shallow Equal)**๋ฅผ ํ๊ธฐ ๋๋ฌธ์, props๊ฐ ํจ์์ด๊ฑฐ๋ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ์๋ ์์ ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์๋ ์ฝ๋์ฒ๋ผ useCallback
์ด๋ useMemo
์ ๊ฐ์ ํ
์ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
useCallback
๊ณผ useMemo
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ฐฑ ํจ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ์ฌ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์๋ก์ด ํจ์๋ ๊ฐ์ฒด ์ฃผ์๊ฐ ํ ๋น๋๋๋ผ๋, ์์ ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๋ค๋ง useCallback
์ด๋ useMemo
์ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์
ํ
์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ฏ๋ก, ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋ ์๋ ์์ผ๋ ์ฃผ์ํด์ผ ํฉ๋๋ค.
2) ์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ๋ ์ด์ง ๋ก๋ฉ
์ฝ๋ ์คํ๋ฆฌํ
(Code Splitting)์ ๋ฒ๋ค๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ์กฐ๊ฐ ๋จ์(chunk)๋ก ๋ถํ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์ฝ๋๋ฅผ ํ๋์ ํฐ ๋ฒ๋ค๋ก ๋น๋ํ์ฌ ๋ฐฐํฌํ๋๋ฐ, ์ด๋ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ๊ธธ์ด์ง๊ฒ ํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ์ฝ๋ ์คํ๋ฆฌํ
์ ํ๋ฉด ํ์ํ ์ฝ๋๋ง ๋์ ์ผ๋ก ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๋ฆฌ์กํธ์์ ์ฝ๋ ์คํ๋ฆฌํ
์ ๊ตฌํํ๊ธฐ ์ํด์๋ React.lazy()
ํจ์์ Suspense ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ **๋ ์ด์ง ๋ก๋ฉ(Lazy Loading)**์ ์ด์ฉํ๊ธฐ๋ ํฉ๋๋ค.
์ ์์ ์ฝ๋์์๋ React.lazy()
์ ๋์ ์ํฌํธ๋ฅผ ํตํด ์ปดํฌ๋ํธ ๋ก๋ฉ์ ์ง์ฐํ๊ณ , Suspense
์ปดํฌ๋ํธ๋ก ๋ก๋ฉ ์ค ํด๋ฐฑ(fallback) UI๋ฅผ ๋ณด์ฌ์ฃผ์ด ๋ ์ด์ง ๋ก๋ฉ์ ๊ตฌํํ๊ณ ์์ต๋๋ค. ์ด์ฒ๋ผ ๋ ์ด์ง ๋ก๋ฉ์ ์ ์ฉํ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ฉ ์๋์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
๋ง์น๋ฉฐ
์ง๊ธ๊น์ง ๋ฆฌ์กํธ ๊ฐ๋ฐ ์ ์์๋์ด์ผ ํ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์ฑ๋ฅ ์ต์ ํ ํ์ ์ดํด๋ณด์์ต๋๋ค. ํนํ ๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ์ธ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ, JSX ๋ฌธ๋ฒ, ๊ฐ์ DOM, Props์ State, ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ์ ์ฐจ์ด์ ๋ฑ์ ์ค์ ์ ์ผ๋ก ๋ค๋ค์ต๋๋ค.
๋๋ถ์ด ๋ฆฌ์กํธ ํ , ๋ฆฌ์กํธ ๊ฐ๋ฐ ๋๊ตฌ, ๋ฆฌ์กํธ ํ๋ ์์ํฌ์ ๊ดํ ๋ด์ฉ๋ ํจ๊ป ์ ๋ฆฌํ์ต๋๋ค. ์ค๋ฌด์์ ํ์ฉํ ์ ์๋ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ์ผ๋ก๋ React.memo์ ๋ฉ๋ชจ์ด์ ์ด์ ํ , ์ฝ๋ ์คํ๋ฆฌํ ์ ์ํ ๋ ์ด์ง ๋ก๋ฉ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ดํด๋ดค๋๋ฐ์. ์ด๋ฒ ๊ธ์์ ์ ๋ฆฌํ ๋ด์ฉ์ด ํ์ฌ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ฑฐ๋, ์ด์ ๋ง ๋ฆฌ์กํธ ๊ณต๋ถ๋ฅผ ์์ํ๋ ๊ฐ๋ฐ์๋ถ๋ค์๊ฒ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค.