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