๐ป ๋ฌธ์
React
์ ๊ฐ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ๋๊ตฌ๋ ๋ทฐ(view
) ๋ฅผ ๊ตฌ์ฑํ๋ ๋๊ตฌ์ด๊ธฐ ๋๋ฌธ์, ์์น์ view
์ ์ฐ๊ด๋์ด ์๋ ์ฝ๋(view code
) ๋ง ์กด์ฌํด์ผ ํฉ๋๋ค. ํ์ง๋ง, view
์ ์ฐ๊ด๋์ด ์์ง ์๋ ์ฝ๋(non-view code
) ๊ฐ ์กด์ฌํ๊ฒ ๋๋ฉด ์๋น์ค์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ฐ๋ผ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ฒ ๋๊ณ , ์ ์ง๋ณด์๋ ์ด๋ ค์ ์ง๊ฒ๋ฉ๋๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ์ฝ๋์ ๊ฐ ๋ถ๋ถ์ด ์ด๋ค ์ญํ ์ ํ๋์ง ๋ถ์ํด์ผ ํฉ๋๋ค. ์ฆ, view code
์ non-view code
๋ฅผ ๋ถ๋ฆฌํ๊ณ , non-view code
๋ฅผ ์ฑ
์์ ๋ฐ๋ผ ๋์ฑ ์ธ๋ถํํด์ผ ํฉ๋๋ค.
ํ์ฅ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์๋ฌธ์์ ์ ์ํ ๋จ๊ณ์, ํด๋น ๋จ๊ณ๋ค์ ์ ์ฉํด ๋ฆฌํํ ๋งํ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐ป ํ์ฅ์ฑ์๋ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๋จ๊ณ
๐จโ๐ป ๋จ์ผ ์ปดํฌ๋ํธ ์ ํ๋ฆฌ์ผ์ด์ (Single Component Application)
ํ๋์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฏธํฉ๋๋ค.
์ ๋ค์ด์ด๊ทธ๋จ์์ ์ ์ ์๋ฏ์ด ํ๋์ ์ปดํฌ๋ํธ์ ๋คํธ์ํฌ ์์ฒญ, ์ํ ๊ด๋ฆฌ, ๋๋ฉ์ธ ๋ก์ง์ด ๋ชจ๋ ์กด์ฌํ๊ณ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์ ํ๋๊ฒ์ด ์ด๋ ต์ต๋๋ค.
๐จโ๐ป ๋ค์ค ์ปดํฌ๋ํธ ์ ํ๋ฆฌ์ผ์ด์ (Multiple Component Application)
๋จ์ผ ์ปดํฌ๋ํธ๋ฅผ ์๋์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ ์ปดํฌ๋ํธ๋ก ๋ถํ ํ ์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๊ฒ๋๋ฉด ๊ฐ๋ ์ฑ์ด ์ข์์ง๊ฒ ๋ฉ๋๋ค.
๐จโ๐ป Hooks ์ ์ด์ฉํ ์ํ ๊ด๋ฆฌ(State management with hooks)
๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ฑฐ๋, view
์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๋ฑ์ ๋ก์ง์ non-view code
๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ์ปดํฌ๋ํธ์ ๊ฐ์ด ์์นํ๋๊ฒ์ด ์ ์ ํ์ง ์์ต๋๋ค. React
์ ๊ฒฝ์ฐ ์ด๋ฐ ๋ก์ง๋ค์ hook
์ ์ฌ์ฉํด UI ์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
์ถ๊ฐ๋ก, ํ๋์ ์ปดํฌ๋ํธ์ ์ํ๋ค์ด ๋ง์ ๊ฒฝ์ฐ๋ hook
์ ์ด์ฉํด ์ปดํฌ๋ํธ๋ก ๋ถํฐ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
๐จโ๐ป ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๋ฑ์ฅ(Business models emerged)
๋ถ๋ฆฌํ hook
์ ์ดํด๋ณด๋ฉด, ์ํ์ ์ฌ์ดํธ์ดํํธ๋ฅผ ์ ์ธํ ๋ก์ง๋ค์ react
์ ๋ฌด๊ดํ ๋ก์ง์์ ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ํด๋น๋ก์ง๋ค์ ๋ฐ๋ก ๋ถ๋ฆฌํ ์ ์๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๋ถ๋ฆฌํ ๋๋ฉ์ธ ๋ก์ง๋ค์ non-view code
์ด๊ธฐ ๋๋ฌธ์, ์์ ๋๋ ๋คํ์ฑ๋ฑ๊ณผ ๊ฐ์ OOP
๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
๐ป ์์น ์ ์ฉํด ๋ฆฌํํ ๋ง ํด๋ณด๊ธฐ
์์์ ์ดํด๋ณธ ์์น์ ๋ฐํ์ผ๋ก ์ผํ๋ชฐ ์๋น์ค์์ ๊ฒฐ์ ๋ฐฉ๋ฒ์ ์ ํํ๋ ์ปดํฌ๋ํธ์ ๋ก์ง์ ๋ฆฌํํ ๋ง ํด๋ณด๊ฒ ์ต๋๋ค.
์์ Payment
์ปดํฌ๋ํธ๋ ๊ฒฐ์ ๋ฐฉ๋ฒ๋ค์ ์๋ฒ์์ ๋ถ๋ฌ์จ ํ, ๋ฐ์ดํฐ ๊ฐ๊ณต ํ view
์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค.
๐จโ๐ป ๋ฌธ์ ์
Payment
์ปดํฌ๋ํธ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋คํธ์ํฌ ์์ฒญ ๋ก์ง, ๋ฐ์ดํฐ ๋ณํ ๋ฐ ๋งตํ ๋ก์ง, ์๋ฒ๋ก ๋ถํฐ ๋ฐ์์จ ๊ฒฐ์ ๋ฐฉ๋ฒ์ ๋ ๋๋ง ํ๋ ๋ก์ง, Payment ์ปดํฌ๋ํธ ์์ฒด์ ๋ ๋๋ง ๋ก์ง ์ ๋ชจ๋ ์ดํดํด์ผ ํฉ๋๋ค.
๐จโ๐ป ํ์ ์ปดํฌ๋ํธ ์ถ์ถ์ ํตํ view ๋ถํ (= ๋ค์ค ์ปดํฌ๋ํธ ์ ํ๋ฆฌ์ผ์ด์ )
๊ฒฐ์ ๋ฐฉ๋ฒ ๋ ๋๋ง ๋ก์ง์ Payment
์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
PaymentMethod
์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ฉด Payment
์ปดํฌ๋ํธ๋ ์๋์ ๊ฐ์ด ๋จ์ํํ ์ ์์ต๋๋ค.
๐จโ๐ป View code ์ non-view code ์ฝ๋ ๋ถ๋ฆฌ (= Hooks ์ ์ด์ฉํ ์ํ๊ด๋ฆฌ)
non-view code
์ ๊ทธ์ ๊ด๋ จ๋ ์ํ๋ฅผ hook
์ผ๋ก ๋ถ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๐จโ๐ป ๋ก์ง์ ์บก์ํํ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง (= ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๋ฑ์ฅ)
์ ๋จ๊ณ๋ฅผ ํตํด Payment
์ปดํฌ๋ํธ์ view-code
๋ ์์ ๋จ์๋ก ๋๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ก๊ณ , non-view code
๋ view code
๋ก ๋ถํฐ ๋ถ๋ฆฌ๋์ด ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ก์ต๋๋ค.
์ด์ ๋ถ๋ฆฌ๋ non-view code
๋ฅผ ์ฑ
์์ ๋ฐ๋ผ ์ธ๋ถํ ํด๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ PaymentMethod
์ปดํฌ๋ํธ์์ ๊ธฐ๋ณธ ๊ฒฐ์ ์๋จ์ ๊ฒ์ฆํ๋ ๋ก์ง (method.provider === 'cash'
) ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ก์ง์ ๋ฐ์ดํฐ์ ํํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์์ ์ด ํ์ํ๋ฉฐ, ๋ง์ฝ ํฉ์ด์ ธ ์๋ ๊ฒฝ์ฐ์๋ ๋ ํฐ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ usePaymentMethods
hook
์์ ๋ฐ์ดํฐ ๋ณํ ๋ก์ง์ ํด๋์ค๋ก ๋ถ๋ฆฌํ ํ, ํด๋น ํด๋์ค์ ๊ฒ์ฆ๋ก์ง์ ํฌํจํ๋ฉด ํด๊ฒฐ ํ ์ ์์ต๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
[๋ฒ์ญ] ์ ์๋ ค์ง UI ํจํด์ ์ฌ์ฉํ์ฌ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์
๋ชจ๋ํํ๊ธฐ
Modularizing React Applications with Established UI Patterns