TSyringe
ํ์ตํค์๋
์์กด์ฑ ์ฃผ์ (Dependency Injection)
TSyringe
reflect-metadata
singleton (์ฑ๊ธํค)
์์กด์ฑ ์ฃผ์
(Dependency Injection)
ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กด์ฑ์ ์ ๊ณตํ๋ ํ ํฌ๋
์์กด์ฑ ์ฃผ์ ์ ์๋๋
๊ฐ์ฒด์ ์์ฑ
๊ณผ์ฌ์ฉ์ ๊ด์ฌ์ ๋ถ๋ฆฌํ๋ ๊ฒ
โ ์ด๋ ๊ฐ๋ ์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋ํ์ค๋ค.
์์ ๋ฅผ ํตํด ์ดํดํด๋ณด๊ธฐ
TypeScript๋ก API call์ ํ๋ ๋ก์ง
fetchTodo ํจ์๋ axios ๋ฅผ import ํด์ ์ด์ฉํ๋ค. ์ฆ, fetchTodo ํจ์๋ axios ๋ชจ๋์
์์กด
ํ๋ค.
๐ค ๊ทธ๋ ๋ค๋ฉด ์์กด์ฑ ์ฃผ์
์?
React์ Context API ์์กด์ฑ ์ฃผ์
๋๊ตฌ
Context API๋ Provider ๋ฅผ ํตํด ๊ฐ์ ์ฃผ์ ํด ์ฃผ๋ฉด, useContext ๋ฅผ ํตํด ํด๋น ๊ฐ์ ๊ตฌ๋ ํ๋ ํํ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. Child ๋ age ๋ผ๋ ๊ฐ์ import ํ์ง ์์๊ณ , Context API ๋ฅผ ํตํด ์ฃผ์ ๋ฐ์๋ค.
TSyringe
A lightweight dependency injection container for TypeScript/JavaScript for constructor injection.
TypeScript์ฉ DI(์์กด์ฑ ์ฃผ์ ) ๋๊ตฌ
๐ง TSyringe ํ์ตํ๋ ์ด์ ๋?
TSyringe๋ฅผ ์ฌ์ฉํด์ Prop Drilling
๋ฌธ์ ๋ฅผ Context๋ฅผ ์ฌ์ฉํ์ง ์๊ณ TSyringe๋ฅผ ์ฌ์ฉํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ์ต
๐ฉ๐ปโ๐ป ๊ฐ๋จํ ์ค์ต์ ํตํด TSyringe ์ฌ์ฉํด๋ณด๊ธฐ
1. โ๏ธ TSyringe, reflect-metadata ์ค์น
2. ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ CounterStore Class๋ฅผ ์ค๋น
3. ๐ src/main.tsx
์ src/setupTests.ts
reflect-metadata import
main.tsx
์ src/setupTests.ts
reflect-metadata import๐จ tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.
ํด๋น App์ ์์ ์ง์ (์ง์
์ง์ ) main.tsx reflect-metadata
๋ฅผ importํด์ค์ผ ํ๋ค. ํ
์คํธ๋ฅผ ์ํด์๋ setupTests.ts ํ์ผ์ reflect-metadata๋ฅผ importํด์ค๋ค.
4. @ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ tsconfig.json
ํ์ผ ์์ฑ ์ถ๊ฐ
tsconfig.json
ํ์ผ ์์ฑ ์ถ๊ฐ5. container์ ๋ฑ๋ก๋์ด์ resolve๋ฅผ ํตํด CounterStore ์ ๊ทผ (์์กด์ฑ ์ฃผ์
)
โ
์ค์ต์ ํตํด ์๊ฒ ๋ ์
Counter/ CounterControl ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ โ CounterStore์ count ๊ณต์ ๋ฐฉ๋ฒ
Counter โ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฐฏ์
CounterControl โ
Increase
๋ฒํผ
Counter ์ปดํฌ๋ํธ๊ฐ 2๊ฐ ๊ฒฝ์ฐ โ count ๊ฐ์ด ๋์ผํ๊ฒ ์ ์ฉ ๋ ์ ์๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
new Set
useEffect (add, delete)
๊ด์ฌ์ฌ ๋ถ๋ฆฌ โ External Store(CounterStore)์ ํ์ฉํด hooks์ผ๋ก ๋ถ๋ฆฌํด์ ์ฌ์ฌ์ฉ ํ๋ ๋ฐฉ๋ฒ
singleton(์ฑ๊ธํค)
๋จ ํ๋์ ์ ์ผํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฝ๋ ํจํด
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด ์ธ์คํด์ค๊ฐ ํ์ํ ๋ ๋๊ฐ์ ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ ํ์ฉํ๋ ๊ธฐ๋ฒ
๋ํ์ ์ธ ์์ โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋
์ฐ๋ฆฌ๊ฐ ์ ์ญ ๋ณ์๋ผ๋๊ฑธ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์๋๋ง๋ค ์ง์ญ ๋ณ์๋ก ์ ์ธํด์ ์ฌ์ฉํ๋ฉด ์ฌ์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ๋ญ๋น, ์ ์ญ์์ ํ๋ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฑ๊ธํค ๊ธฐ๋ฒ์ ์ค์ง ํ๊ฐ์ ์ธ์คํด์ค ์์ฑ์ ๋ณด์ฆํ์ฌ ํจ์จ์ ์ฐพ์ ์ ์์ง๋ง, ๋ฌธ์ ์ ๋ค์ด ์๋ฐ๋๊ธฐ ๋๋ฌธ์ ๊ท ํ์กํ ์ ํ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ทธ๋์ ์ง์ ์ ์ ๊ฐ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ํ๋ ์์ํฌ์ ๋์์ ๋ฐ์ ์ฌ์ฉํด์ ๋ฌธ์ ์ ๋ค์ ๋ณด์ํ๋ฉด์ ์ฅ์ ์ ํํ์ ๋๋ฆด ์ ์๋ค. (๋ด๋ถ์ ์ผ๋ก ํด๋์ค์ ์ ์ด๋ฅผ IoC(Inversion of Control)๋ฐฉ์์ ์ปจํ ์ด๋์๊ฒ ๋๊ฒจ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์)
๐ ์ฐธ๊ณ
Last updated