2. Tsyringe

  • TypeScript์šฉ DI ๋„๊ตฌ(IoC Container)

  • Tsyringe๋ฅผ ์ด์šฉํ•ด store๋ฅผ ๋งŒ๋“ค์–ด prop drilling์„ ๋ง‰์•„๋ณด์ž

DI

  • ์˜์กด์„ฑ์„ ์™ธ๋ถ€(IoC container)์—์„œ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ

  • ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์˜์กด์„ฑ์˜ ์ธํ„ฐํŽ˜์ด์Šคํ™”

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•˜์—ฌ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ

  • ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ์œผ๋ฉด ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋จ

  • ํด๋ž˜์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ์•ฝํ•ด์ ธ ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ๋  ํ•„์š”์„ฑ์ด ๋‚ฎ์•„์ง

reflect-metadata

  • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(@)๋ฅผ ์ด์šฉํ•ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ์™€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š” ์ผ€์ด์Šค์— ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด

  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ๋™์‹œ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผํ•จ

  • @singleton ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์‹ค์Šต ๋‚ด์šฉ ์ •๋ฆฌ

  • ์นด์šดํ„ฐ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” <Counter/> ์ปดํฌ๋„ŒํŠธ

  • ์นด์šดํ„ฐ ๊ฐ’์„ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์„ ๊ฐ€์ง€๋Š” <CounterController/> ์ปดํฌ๋„ŒํŠธ

  • ๋‘ ์ปดํฌ๋„ŒํŠธ๋Š” useCounterStore ํ›…์„ ์ด์šฉํ•ด์„œ store์— ์žˆ๋Š” count๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

  • store๋Š” CounterStore ์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค๋ฅผ tsyringe ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅํ•ด์„œ ์‚ฌ์šฉ(์–ด๋””์„œ๋“ ์ง€ ํ•˜๋‚˜์˜ CountStore ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก tsyringe๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์คŒ)

  • CounterStore ํด๋ž˜์Šค๊ฐ€ ๋ฆฌ์Šค๋„ˆ ์…‹์— forceUpdate๋ฅผ ๋“ฑ๋กํ•ด๋‘๊ณ  count๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค publish๋กœ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ์ƒํƒœ ๋ณ€๊ฒฝ์‹œ ๋ฆฌ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ์Œ

Last updated