ContainerยทPresentational Pattern

React ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์šฉ์–ด

  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(separation of concerns, SoC): ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋‚˜์˜ ๋‹จ์ผ ๋ธ”๋ก์œผ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ ๋‹จ์ˆœํ•œ ๊ฐœ๋ณ„ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์ž‘์—…. SOLID ์›์น™ ์ค‘ 2๊ฐœ๊ฐ€ ์ด ๊ฐœ๋…์—์„œ ํŒŒ์ƒ๋˜์—ˆ๋‹ค.(๋‹จ์ผ ์ฑ…์ž„, ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ)

์˜๋ฏธ

Hook์ด ์กด์žฌํ•˜๊ธฐ ์ „, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์กŒ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์˜์กด๋„๊ฐ€ ๋†’์•„์ ธ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ค์› ๊ณ , ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ง๊ณผ View ๋ ˆ์ด์–ด๋ฅผ ๋‚˜๋ˆ  ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ด๋‹ค.

Container/Presentation ์ปดํฌ๋„ŒํŠธ

Container ์ปดํฌ๋„ŒํŠธ

  • ๋™์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•œ๋‹ค.

  • ๋‚ด๋ถ€์— presentational ์ปดํฌ๋„ŒํŠธ์™€ container ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ถ€ ๋ž˜ํ•‘์šฉ div๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ž์ฒด์ ์ธ DOM ๋งˆํฌ์—…๊ณผ ์Šคํƒ€์ผ์ด ์—†๋‹ค.

  • presentational ์ปดํฌ๋„ŒํŠธ ๋˜๋Š” ๋‹ค๋ฅธ container ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ์™€ ๋™์ž‘์„ ์ œ๊ณตํ•œ๋‹ค.

Presentational ์ปดํฌ๋„ŒํŠธ

  • ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•œ๋‹ค.

  • ๋‚ด๋ถ€์— presentational ์ปดํฌ๋„ŒํŠธ์™€ container ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณดํ†ต ์ž์ฒด์ ์ธ DOM ๋งˆํฌ์—…๊ณผ ์Šคํƒ€์ผ์ด ์žˆ๋‹ค.

  • store ๋“ฑ์˜ ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์—†๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋˜๋Š” ๋ฎคํ…Œ์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค.

  • props๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ์™€ ์ฝœ๋ฐฑ์„ ์ˆ˜์‹ ํ•œ๋‹ค.

  • ์ž์ฒด ์ƒํƒœ๋ฅผ ๊ฑฐ์˜ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.(์žˆ๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ UI ์ƒํƒœ)

์žฅ์ 

  • ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ๋ณต์žกํ•˜๊ณ  statefulํ•œ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ์–ด, ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ์ธก๋ฉด์—์„œ ํšจ๊ณผ์ ์ด๋‹ค.

  • Presentation ์ปดํฌ๋„ŒํŠธ๋Š” ์•ฑ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์š”๊ตฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ props์— ๋„˜๊ฒจ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ Storybook ํ…Œ์ŠคํŠธ ๋“ฑ์—์„œ ์ด์ ์„ ๊ฐ–๋Š”๋‹ค.

๋‹จ์ 

  • Container/Presentational ํŒจํ„ด์„ ์ฒ˜์Œ ์†Œ๊ฐœํ•œ Dan Abramov๋Š” ํ˜„ ์‹œ์ ์—์„œ ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ์–ธ๊ธ‰ํ•˜์˜€๋‹ค. ์ด์œ ๋Š”, ์ž„์˜๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•„๋„ Hook์ด ๋™์ผํ•œ ์ผ์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

Last updated