๐งฉ Presentational and Container Pattern
โ Presentational and Container ํจํด์ด๋?
โก๏ธ Presentational ์ปดํฌ๋ํธ์ Container ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ ์ถ๋ ฅ์ ๋ถ๋ฆฌํ๋ ํจํด
๐ Container Component
- ์ฃผ๋ก ๋ฐ์ดํฐ fetch๊ฐ ์ด๋ฃจ์ด์ง๋ค. Redux๋ฅผ ์ฌ์ฉํด ์ํ ๊ด๋ฆฌ๋ฅผ ํ ๊ฒฝ์ฐ
dispatch
- behavior ๋ก์ง์ ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ๋ก, DOM Markup์ด๋ CSS๊ฐ ์๋ค.
- ๋ ๋๋ง๋์ด์ผ ํ ๋ฐ์ดํฐ ๋๋ callback ํจ์๋ฅผ Presentation์ด๋ ๋๋ค๋ฅธ Container ์ปดํฌ๋ํธ์
props
๋ก ์ ๋ฌํ๋ค.
- ์ฐ๊ด ์๋ ์๋ธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ค.
๐ Presentational Component
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์๊ณ , CC(Container Component)๋ก๋ถํฐ props๋ฅผ ๋ฐ๋๋ค.
- View, ์ฆ DOM Markup๊ณผ Style(CSS)๋ฅผ ๋ด๋นํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ state๋ฅผ ์ง์ ์กฐ์ํ์ง ์๊ณ CC๊ฐ ๋ด๋ ค์ค props์ ํจ์๋ก state๋ฅผ ๋ณ๊ฒฝํ๋ค.
- View์ ํ์ํ state๋ ๊ฐ์ง ์ ์๋ค.
๐ ์ฅ์
- ์ฑ์ ๊ธฐ๋ฅ๊ณผ ui์ ๊ตฌ๋ถ์ด ์ฝ๋ค.
- ๋ก์ง ์ํ๊ณผ Markup์ด ๋ถ๋ฆฌ๋์ด ์์ด ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋ฐ์ด๋๋ค.
- Markup ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๋ค.
๐
๋จ์
- ์ปจํ
์ด๋์ ๋ฒ์๋ฅผ ํฌ๊ฒ ์ก๋ ๊ฒฝ์ฐ FC์ ์ ๋ฌํ props๊ฐ ๋ง์์ง๊ณ , ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ์๋ค.
- ์ปจํ
์ด๋์ ๋ฒ์๋ฅผ ์๊ฒ ์ก๋ ๊ฒฝ์ฐ ์๋ จ๋๊ฐ ๋ฎ๋ค๋ฉด ๋ถ๋ฆฌํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๋ค ์ ์๋ค.
๐งฉ Atomic Design Pattern
โ Atomic Design ํจํด์ด๋?
โก๏ธ ๊ฐ์ฅ ์์ ์ปดํฌ๋ํธ ๋จ์๋ฅผ ์์(Atoms) ๋ก ์ค์ ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ต๋ํํ๋ ํจํด
โก๏ธ ์์ ์ปดํฌ๋ํธ๋ ์์๋๋ก ๋ถ์(Molecules), ์ ๊ธฐ์ฒด(Organisms), ํ
ํ๋ฆฟ(Templates), ํ์ด์ง(Pages) ๊ฐ ๋๋ค.
๐ ์์ (Atoms)
- button, title, input๊ณผ ๊ฐ์ basic html elements๋ฅผ ํฌํจํ๋ ๊ฐ์ฅ ์์ ๊ตฌ์ฑ ์ปดํฌ๋ํธ
- ์์ ์ปดํฌ๋ํธ์์ ์ฌ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ๋ค๋ฅธ ๊ณณ์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ์ต์ํ์ ๊ธฐ๋ฅ๋ง์ ํฌํจํ๋๋ก ์ ์ํด์ผ ํ๋ค.
- ๋ ์ด๋ธ(Label), ํ
์คํธ(Text), ๋ฒํผ(Button) ๋ฑ
๐ ๋ถ์ (Molecules)
- 2๊ฐ ์ด์์ ์์๋ก ๊ตฌ์ฑ๋์ด ์๋, ํ๋์ ๋จ์๋ก ํจ๊ป ๋์ํ๋ ๊ทธ๋ฃน
- ์
๋ ฅ ํผ(Input forms), ๋ค๋น๊ฒ์ด์
(Navigation), ์นด๋(Card) ๋ฑ
๐ ์ ๊ธฐ์ฒด (Organisms)
- ๋ถ์, ์์, ๋๋ ๋ค๋ฅธ ์ ๊ธฐ์ฒด๋ก ๊ตฌ์ฑ๋ ๋น๊ต์ ๋ณต์กํ ๊ทธ๋ฃน
- ์ธํฐํ์ด์ค์ ๊ฐ๋ณ์ ์ธ ์์ญ์ ํ์ฑํ๋ค.
- ์ด ๋จ์์์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํํ๊ธฐ๋ ํ๋ค. (์ง๋ฆฌ์ ์ผ๋ฐ์ผ ,,,)
๐ ํ
ํ๋ฆฟ (Templates)
- ๋ถ์, ์์, ์ ๊ธฐ์ฒด ์ปดํฌ๋ํธ๋ค์ ๋ฐฐ์นํ๊ณ ์ค๊ณ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ฃน. ์ฆ ์คํ์ผ๋ง์ ์ง์คํ ๋จ์
- ์ค์ ์ปดํฌ๋ํธ๊ฐ ์์ ๊ฒฝ์ฐ ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ๊ณจ๊ฒฉ ๊ตฌ์กฐ (์์ด์ดํ๋ ์ ๊ฐ์ ๋๋ !!)
๐ ํ์ด์ง (Pages)
- ์ค์ ์ปจํ
์ธ ๋ค์ ๋ฐฐ์นํ UI๋ฅผ ๋ณด์ฌ์ฃผ๋, ํ
ํ๋ฆฟ์ด ๊ตฌ์ฒดํ๋ ๊ทธ๋ฃน
- ๋ถ์, ์์, ์ ๊ธฐ์ฒด๋ฅผ ํฌํจํ๋ค.
- ๋ณดํต ์ด ๋จ์์์ ์ดํ๋ฆฌ์ผ์ด์
์ํ ๊ด๋ฆฌ (Redux ๋ฑ)๊ฐ ์ด๋ฃจ์ด์ง๋ค. but ๋ถ์, ์ ๊ธฐ์ฒด, ํ
ํ๋ฆฟ ๋จ์์์ ์ปดํฌ๋ํธ ๋์์ ์ํ ์ํ๊ด๋ฆฌ๋ ๊ฐ๋ฅ ><
๐ ์ฅ์
- ์ดํ๋ฆฌ์ผ์ด์
์์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๊ณ ํ
์คํธํ ์ ์๋ค.
- ํจํด์ด ํ๋ฆฝ๋๋ฉด ์ปดํฌ๋ํธ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์์๋ณด๊ธฐ ์ฌ์ฐ๋ฉฐ ์ค๊ณ ๋ณ๊ฒฝ์ด ํ์ํ ์ ๋ ๋น ๋ฅด๊ณ ์ ์ฐ์ฑ ์๊ฒ ๋์ฒํ ์ ์๋ค.
- ๋ชจ๋ ๋์์ธ ์์์ ๋ํ ๋ณ๊ฒฝ์ ์ปดํฌ๋ํธ ์คํ์ผ ๋ณ๊ฒฝ์ผ๋ก ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๊ณ , styles๋ฅผ ์ต์๋ก ๊ตฌํํ ์ ์์ด style ๋ ๊ฑฐ์๊ฐ ์ค์ด๋ ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๋ฏ๋ก ์ปดํฌ๋ํธ๊ฐ ์์ผ์๋ก ์์
์๋๊ฐ ๋นจ๋ผ์ง๋ค.
๐
๋จ์
- ์๋ จ๋๊ฐ ๋ถ์กฑํด ์ปดํฌ๋ํธ๋ฅผ ์ ๋ถ๋ฆฌํ์ง ๋ชปํ๋ค๋ฉด ์คํ๋ ค ์ปดํฌ๋ํธ ๊ฐ ์์กด์ฑ๊ณผ ๋ณต์ก๋๊ฐ ๊น๋ค๋ก์์ ธ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
- ์ปดํฌ๋ํธ ๊ฐ ์์กด์ฑ์ด ์ํ๋ก ๋ฐ์ํ๋ฏ๋ก ํ์ ์ปดํฌ๋ํธ์ ์๋ฌ๊ฐ ์์ ์ปดํฌ๋ํธ์๋ ์ํฅ์ ๋ฏธ์น๋ค.
- ์์ ๋จ์๋ฅผ ๋ณด์์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ง์ ์๋์ ์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์์
- ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ฆฌ๋์ด ์๊ณ ์์ ์ปจํ
์ด๋ ์ปดํฌ๋ํธ์ ์ฌ์ด์ฆ๋ฅผ ๊ฒฐ์ ํ ์ ์์ ๊ฒฝ์ฐ ๋ฏธ๋์ด์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค.
- flex, grid์ ๊ฐ์ CSS ์์ฑ์ ๊ตฌํํ ๋ ์ด์์ ์ปดํฌ๋ํธ๋ฅผ ๋์
ํด ํด๊ฒฐํ ์ ์์
์ฐธ๊ณ ์๋ฃ
๋์์ธํจํด์ ์ ์ (feat MVC, ์ต์ ๋ฒํจํด)
presentational & container ๋์์ธ ํจํด
Container ์ปดํฌ๋ํธ์ Presentational ์ปดํฌ๋ํธ
App ์ปดํฌ๋ํธ ์ ๋ฆฌํ๊ธฐ
์ปดํฌ๋ํธ ๋ถ๋ฆฌ์ ๋ฏธํ
์ํ ๋ฏน(Atomic) ์ปดํฌ๋ํธ ๋์์ธ ๊ฐ๋ฐ ํจํด
๋ฆฌ์กํธ ์ดํ๋ฆฌ์ผ์ด์
๊ตฌ์กฐ - ์ํ ๋ฏน ๋์์ธ
React Design Pattern ๐จ
+) Atomic ๋์์ธ ํจํด ๊ด๋ จ ๊ธ๋ค ์ฝ์ผ๋ฉด์, ๋ฉ์์ง๋ง ์ ๊ฑฐ ์ธ์ ์ ์ฉํ์ง ์ถ์๋๋ฐ ๋ง์ ๊นํ ์ฐพ์๋ณด๋ ์ด ํจํด ์ ์ฉํ์ ๋ถ๋ค์ด ๊ฝค ๋ง๋๋ผ ๊ทธ๋์ ๋๋ ์ ์ฉํด๋ณด๋ ค ํจ ๊ทผ๋ฐ ์ธ์ ํ์ง ,,,?
+) ์ด๋ค์ ๊ธ์ ๋ด ํ๋ก์ ํธ์ Atomic ๋์์ธ ์ ์ฉํ๋ ๊ฑธ๋ก ํด์ผ๊ฒ ๋ค ๊ทผ๋ฐ ๋ถ์คํจ์ ๊ณ๋ค์ธ
๐