2.React State
React state๋?
React์์ state(์ํ)๋ components(๊ตฌ์ฑ ์์) ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ตฌ์ฑ ์์์ ๋ด๋ถ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ ๊ตฌ์ฑ ์์ ์์ฒด์์ ์์ ํ ์ ์๋ค. ๊ตฌ์ฑ ์์์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๋ ์๋์ผ๋ก ๊ตฌ์ฑ ์์์ ํด๋น ํ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ ๋๋งํ์ฌ ์ ๋ฐ์ดํธ๋ ์ํ๋ฅผ ๋ฐ์ํ๋ค.
์ด ์์์ Counter ๊ตฌ์ฑ์์๋ useState๋ฅผ ์ฌ์ฉํ์ฌ 0์ผ๋ก ์ด๊ธฐํ๋ count๋ผ๋ ์ํ ๋ณ์๋ฅผ ์ ์ํ๋ค. ๋ํ ์ํ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด setCount ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ต๋ช ํจ์๊ฐ ํธ์ถ๋๋ฉฐ setCount ํจ์๋ฅผ ์ฌ์ฉํ์ฌ count ์ํ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ค. ๊ทธ๋ฐ ๋ค์ React๋ ์ ๋ฐ์ดํธ๋ ์ํ ๊ฐ์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ ๋๋งํ์ฌ ์ count ๊ฐ์ด ํ์๋๋๋ก ํ๋ค.
'useState'๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋์ค ๊ตฌ์ฑ ์์๋ ๊ตฌ์ฑ ์์์ 'props'๋ฅผ ์๋์ผ๋ก ์กฐ์ํ ํ์ ์์ด ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์์์ ์ํ ๊ฐ์ ์ ์ํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๋ค.
DRY ์์น
"Don't Repeat Yourself"(DRY)๋ ์ฝ๋ ๋ฐ๋ณต์ ์ค์ด๊ณ ๊ธฐ์กด ์ฝ๋์ ์ฌ์ฌ์ฉ์ ์ต๋ํํ๋ ๊ฒ์ ์นํธํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์์น์ด๋ค. ์ด ์์น์ ์ง์์ด๋ ๋ ผ๋ฆฌ์ ๋ชจ๋ ๋ถ๋ถ์ด ์์คํ ๋ด์์ ๋จ์ผํ๊ณ ๋ชจํธํ์ง ์์ ํํ์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ๋ช ์ํ๋ค.
์ค์ ๋ก ์ด๊ฒ์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ๊ธฐ๋ฅ์ด๋ ๋ ผ๋ฆฌ๋ฅผ ์ฌ๋ฌ ์์น์ ๋ณต์ ํ์ง ์์์ผ ํจ์ ์๋ฏธํ๋ค. ์ด๋ ์ฝ๋ ๋ถํ๋ฆผ, ๋ณต์ก์ฑ ์ฆ๊ฐ ๋ฐ ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ก ์ด์ด์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ ๊ณตํต ๊ธฐ๋ฅ์ ํ์์ ๋ฐ๋ผ ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์์ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋, ํจ์ ๋๋ ํด๋์ค๋ก ์ถ์ํ๋์ด์ผ ํ๋ค.
DRY ์์น์ ๋ฐ๋ฅด๋ฉด ๋ ๊นจ๋ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ๋ฒ๊ทธ๊ฐ ์ ๊ณ ๋ณ๊ฒฝ์ด ๋ ์ฝ๋ค. ๋ํ ๋ ผ๋ฆฌ๊ฐ ์ค์ ์ง์คํ๋๊ณ ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์ ๋ถ์ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ํ ์คํธํ๊ณ ๋ฆฌํฉํฐ๋งํ ์ ์๋ค.
๋ฆฌ์กํธ์์ ์์ ํ๋ค๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ด ์์น์ ์งํค๊ฒ ๋๋ ๊ฒ ๊ฐ๋ค. UI์์ ์ ํ๋ค๋ณด๋ฉด ๋์ผ ํํ์ UI๋ฅผ ์ฌ๋ฌ ํ๋ฉด์์ ๋ณด์ฌ์ค์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ด๋ด๊ฒฝ์ฐ์ ํ๋ฉด๋ง๋ค ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด ๊ด๋ฆฌํด์ผํ๋ ์ปดํฌ๋ํธ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋์ด๋๋๊ฑฐ๊ณ ๊ทธ๋ฌ๋ค๋ณด๋ฉด ๊ฐ์ ์์ ์ ํ๋๋ผ๋ ์์ ์์ ์ ํ๋ ์ค์ ๊ฐ์ ํํ์ด์ง๋ง ๋ค๋ฅธ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ๋์๋ค.
๊ทธ๋์ ์์ ์ ํ๋ฉด์ ๋น์ทํ ํผ์ ๊ฐ์ง๋ UI๋๋ ๋์ผํ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ ํจ์๋ค์ ๊ณต์ฉ์ผ๋ก ๋ฐ๋ก ์์ ์ ํด์ ํ ๊ณณ์์ ์ ์ง ๋ณด์ ํ ์ ์๋๋ก ์์ ํ๋๊ฒ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ค.
SSOT(Single Source of Truth)
SSOT(Single Source of Truth)๋ ์์คํ ์ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐ๊ฐ์ด ์์คํ ๋ด์์ ๋ชจํธํ์ง ์์ ๋จ์ผ ํํ์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ๋ช ์ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์์น์ด๋ค. ์ฆ, ๋ฐ์ดํฐ๋ ํ์ํ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์ก์ธ์คํ ์ ์๋ ์ค์ ์์น์ ์ ์ฅ๋์ด์ผ ํ๋ฉฐ ์ด ๋ฐ์ดํฐ๋ ํด๋น ํน์ ์ ๋ณด์ ๋ํ ์ ์ผํ ์ ๋ณด ์์ค์ฌ์ผ ํ๋ค.
์ค์ ๋ก ์ด๊ฒ์ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ๊ฐ๋ฐ์๊ฐ ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋์ผํ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ๋ณต์ฌ๋ณธ์ ๋์ง ์๋๋ก ๋ ธ๋ ฅํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ ๋ถ์ผ์น, ์ค๋ฅ ๋ฐ ๋ฆฌ์์ค ๋ญ๋น๋ก ์ด์ด์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ ๋ฐ์ดํฐ๋ ํด๋น ๋ฐ์ดํฐ์ ์ ๋ขฐํ ์ ์๋ ์์ค ์ญํ ์ ํ๋ ๋จ์ผ ์์น์ ์ ์ฅํด์ผ ํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค, API ๋๋ ํ์ผ ์์คํ ์ด ๋ ์ ์๋ค.
๊ฐ๋ฐ์๋ SSOT ์์น์ ๋ฐ๋ผ ์ ์ฒด ์์คํ ์์ ๋ฐ์ดํฐ๊ฐ ์ผ๊ด๋๊ณ ์ต์ ์ํ์ธ์ง ํ์ธํ์ฌ ๋ฒ๊ทธ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์์คํ ์ ์ฒด์ ๋ณต์ ํ๋ ๋์ ํ ๊ณณ์์๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ โโ๊ด๋ฆฌํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ํ์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ SSOT ์์น์ ๋ชจ๋ ๊ณ ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ๋ฌ ์์น์ ๋ณต์ ๋๊ธฐ๋ณด๋ค๋ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด์ผ ํ๋ค๊ณ ์ ์ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ถ๋ถ์ด ๋์ผํ ์ต์ ์ ๋ณด๋ก ์๋ํ๊ณ ์ค๋ฅ๋ ๋ถ์ผ์น์ ์ํ์ด ์ค์ด๋ ๋ค.
useState
React์์ useState๋ ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์๊ฐ ์ํ๋ฅผ ๊ฐ์ง ์ ์๋๋ก ํ๋ hook์ด๋ค. ์ด์ ์๋ setState๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค ๊ตฌ์ฑ ์์์์๋ง ๊ฐ๋ฅํ์๋๋ฐ ์์ฆ์ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์(Functional components)์์ ์ํ๋ฅผ ์ ์ํ๊ณ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
useState hook์ ์ด๊ธฐ ์ํ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๊ณ ํ์ฌ ์ํ ๊ฐ๊ณผ ํด๋น ์ํ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ ํจ์์ ๋ ๊ฐ์ง ๊ฐ์ด ํฌํจ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ํ์ฌ ์ํ ๊ฐ์ผ๋ก ๊ตฌ์ฑ ์์์ ๋ ๋๋ง ๋ฉ์๋์์ ์ก์ธ์คํ๊ณ ํ์ํ ์ ์๋ค. ๋ ๋ฒ์งธ ๊ฐ์ ์ํ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ํธ์ถํ ์ ์๋ ํจ์๋ก, ๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง๋๋๋ก ํ๋ค.
1๊ธ ๊ฐ์ฒด(first-class object)๋?
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค๊ณ์์ ์ผ๊ธ ๊ฐ์ฒด(๋๋ ์ผ๊ธ ์๋ฏผ)๋ ๊ฐ ๋๋ ๊ฐ์ฒด๋ก ์ทจ๊ธ๋์ด ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๊ฑฐ๋ ํจ์์์ ๋ฐํ๋๊ฑฐ๋ ๋ณ์์ ํ ๋น๋ ์ ์๋ ์ํฐํฐ๋ฅผ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฉ์ด๋ค.
๊ฐ๋จํ ๋งํด์ ์ผ๊ธ ๊ฐ์ฒด๋ ์ธ์ด์ ๋ค๋ฅธ ๊ฐ์ด๋ ๊ฐ์ฒด์ฒ๋ผ ์กฐ์ํ ์ ์๋ ์ํฐํฐ๋ค.
JavaScript ๋ฐ Python๊ณผ ๊ฐ์ ์ผ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ฏ๋ก ๋ณ์์ ํ ๋นํ๊ฑฐ๋ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ํจ์์์ ๊ฐ์ผ๋ก ๋ฐํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐ์ฑ๊ณผ ํํ๋ ฅ์ ๋์ผ ์ ์๋ค.
JavaScript์์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด๋ก ๊ฐ์ฃผ๋๋๋ฐ ์ฆ, ์ธ์ด์ ๋ค๋ฅธ ๊ฐ์ด๋ ๊ฐ์ฒด์ฒ๋ผ ์ทจ๊ธ๋ ์ ์๋ค. ์ด๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์์ ๋ ํฐ ์ ์ฐ์ฑ๊ณผ ํํ๋ ฅ์ ํ์ฉํ๋ค.
๋ค์์ JavaScript์์ ํจ์๊ฐ ์ด๋ป๊ฒ ์ผ๊ธ ๊ฐ์ฒด์ธ์ง์ ๋ํ ๋ช ๊ฐ์ง ์
๋ณ์์ ๊ธฐ๋ฅ์ ํ ๋นํ ์ ์๋ค.
ํจ์๋ ๋ค๋ฅธ ํจ์์ ๋ํ ์ธ์๋ก ์ ๋ฌ๋ ์ ์๋ค.
ํจ์๋ ๋ค๋ฅธ ํจ์์ ๊ฐ์ผ๋ก ๋ฐํ๋ ์ ์๋ค.
์ ์์ ์์ ํจ์๋ ์ธ์ด์ ๋ค๋ฅธ ๊ฐ์ด๋ ๊ฐ์ฒด์ฒ๋ผ ์ทจ๊ธ๋๋ฉฐ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์กฐ์๋ ์ ์๋ค.
Lifting State Up
์ํ ์ฌ๋ฆฌ๊ธฐ(Lifting State Up)๋ ํ์ ๊ตฌ์ฑ ์์์ ์ํ๋ฅผ ์์ ๊ตฌ์ฑ ์์๋ก ์ด๋ํ๋ React์ ๊ธฐ์ ์ด๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ํ์ ๊ตฌ์ฑ ์์๊ฐ ๋์ผํ ์ํ๋ฅผ ๊ณต์ ํ๊ณ ์ค์ ์์น์์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ค.
์ ์์ ์์ count ์ํ๋ ParentComponent์ ์ ์ฅ๋๊ณ ChildComponent ๋ฐ AnotherChildComponent์ ์ํ(props)์ผ๋ก ์ ๋ฌ๋๋ค. incrementCount ํจ์๋ ChildComponent์ ์ํ(props)์ผ๋ก ์ ๋ฌ๋์ด ์์ ๊ตฌ์ฑ ์์์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ค.
์์ ๊ตฌ์ฑ ์์๊น์ง ์ํ๋ฅผ ๋ค์ด ์ฌ๋ฆฌ๋ฉด ์ฌ๋ฌ ํ์ ๊ตฌ์ฑ ์์๊ฐ ๋์ผํ ์ํ๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉฐ ์ค์ ์์น์์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ณด๋ค ์ฒด๊ณํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ ์ผ๊ด์ฑ ์๋ ์ํ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฒ๊ทธ์ ์ํ์ ์ค์ผ ์ ์๋ค.
Last updated