1.External Store
κ΄μ¬μ¬μ λΆλ¦¬
κ΄μ¬μ¬ λΆλ¦¬λ μμ€ν μ λ€μν μΈ‘λ©΄ λλ μ± μμ κ΅¬μ± λ° κ²©λ¦¬λ₯Ό κ°μ‘°νλ μννΈμ¨μ΄ κ°λ° μμΉμ΄λ€. Reactμ λ§₯λ½μμ κ΄μ¬μ¬ λΆλ¦¬λ μ¬μ©μ μΈν°νμ΄μ€ κ΅¬μ± μμ, λ°μ΄ν° κ°μ Έμ€κΈ°, μν κ΄λ¦¬ λ° λΉμ¦λμ€ λ‘μ§κ³Ό κ°μ λ€μν κ΄μ¬μ¬λ₯Ό λ³κ°μ λͺ¨λμ λΆλΆμΌλ‘ λΆλ¦¬νλ λ°©μμΌλ‘ μ ν리μΌμ΄μ μ ꡬ쑰ννλ κ²μ μλ―Ένλ€.
κ΄μ¬μ¬λ₯Ό λΆλ¦¬νμμ λ μ»λ μ΄μ
λͺ¨λμ±(Modularity): μ ν리μΌμ΄μ μ λ μμ μ체 ν¬ν¨ κ΅¬μ± μμλ‘ λλλ©΄ μ μ§ κ΄λ¦¬μ μ¬μ¬μ©μ΄ λ μ¬μμ§λ€. κ° κ΅¬μ± μμλ νΉμ μ± μμ μ€μ μ λμ΄ κ°λ³μ μΌλ‘ λ μ½κ² μ΄ν΄νκ³ μμ ν μ μλλ‘ νλ€.
μ½λ μ¬μ¬μ©μ±(Code reusability): κ΄μ¬μ¬λ₯Ό λΆλ¦¬νλ©΄ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ΄λ λ€λ₯Έ νλ‘μ νΈμμλ κ΅¬μ± μμλ₯Ό μ¬μ¬μ©ν μ μλ€. μ΄λ κ² νλ©΄ κ°λ° μκ°κ³Ό λ Έλ ₯μ μ μ½ν μ μλ€.
νμ (Collaboration): μ¬λ¬ κ°λ°μκ° ν νλ‘μ νΈμμ μμ ν λ κ΄μ¬μ¬λ₯Ό λΆλ¦¬νλ©΄ μλ‘μ μ½λλ₯Ό λ°©ν΄νμ§ μκ³ λμμ μμ ν μ μλ€. κ° κ°λ°μλ λ€λ₯Έ μ¬λμ λ°μ λ°μ μΌλ € μμ΄ ν λΉλ κ΄μ¬μ¬μ μ§μ€ν μ μλ€.
Reactκ΄μ μμ λ€μν κΈ°μ κ³Ό ν¨ν΄μ μ¬μ©νμ¬ κ΄μ¬μ¬λ₯Ό λΆλ¦¬κ° κ°λ₯νλ€.
κ΅¬μ± μμ κΈ°λ° μν€ν μ²(Component-based architecture): Reactλ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμμ ꡬμ±μΌλ‘ μ ν리μΌμ΄μ μ ꡬμΆνλλ‘ κΆμ₯νλ€. κ° κ΅¬μ± μμλ κ³ μ ν λ Όλ¦¬μ νλ μ ν μ΄μ μ μΊ‘μννμ¬ λ¬Έμ λ₯Ό λͺ ννκ² λΆλ¦¬ν μ μλ€. κ΅¬μ± μμλ₯Ό ν¨κ» ꡬμ±νμ¬ λ³΅μ‘ν μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆν μ μλ€.
SRP(Single Responsibility Principle): SRPμ λ°λΌ κ° κ΅¬μ± μμλ λ¨μΌ μ± μ λλ κ΄μ¬μ¬λ₯Ό κ°μ ΈμΌ νλ€. μλ₯Ό λ€μ΄ λ°μ΄ν° λ λλ§, μ¬μ©μ μ λ ₯ μ²λ¦¬ λ° μν κ΄λ¦¬λ₯Ό μν λ³λμ κ΅¬μ± μμκ° μμ μ μλ€.
컨ν μ΄λ λ° νλ μ ν μ΄μ κ΅¬μ± μμ(Container and Presentational Components): μ€λ§νΈ μ»΄ν¬λνΈμ λ€ μ»΄ν¬λνΈλΌκ³ λ νλ 컨ν μ΄λμ νλ μ ν μ΄μ μ»΄ν¬λνΈμ κ°λ μ μ΄λ¬ν λ¬Έμ λ₯Ό ꡬλΆνλ λ° λμμ΄ λλ€. 컨ν μ΄λ μ»΄ν¬λνΈλ λ‘μ§κ³Ό λ°μ΄ν° λΆλ¬μ€κΈ°λ₯Ό μ²λ¦¬νλ λ°λ©΄ νλ μ ν μ΄μ μ»΄ν¬λνΈλ μ 곡λ μνμ κΈ°λ°μΌλ‘ UIλ₯Ό λ λλ§νλ λ° μ€μ μ λλ€.
μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬(State management libraries): Reactλ useState λ° useReducerλΌλ μ체 μν κ΄λ¦¬ μμ€ν μ μ 곡νλ€. κ·Έλ¬λ λ³΄λ€ λ³΅μ‘ν μ ν리μΌμ΄μ μ κ²½μ° Redux λλ MobXμ κ°μ μΈλΆ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλλ‘ μ νν μ μλ€. μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ μν κ΄λ¦¬μ κ΄λ ¨λ λ¬Έμ λ₯Ό λΆλ¦¬νλ λ° λμμ΄ λλ©° μ ν리μΌμ΄μ μμ€ μνλ₯Ό μ²λ¦¬νλ μ€μ μ§μ€μ μ κ·Ό λ°©μμ μ 곡νλ€.
λ³λμ λ°μ΄ν° κ°μ Έμ€κΈ°(Separate data fetching): React μ ν리μΌμ΄μ μμλ API λλ κΈ°ν μμ€μμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ²μ΄ μΌλ°μ μ΄λ€. λ°μ΄ν° κ°μ Έμ€κΈ° λ Όλ¦¬λ₯Ό λ³λμ νμΌ λλ νν¬λ‘ λΆλ¦¬νλ©΄ λ¬Έμ λ₯Ό λ 립μ μΌλ‘ 격리νκ³ ν μ€νΈν μ μλ€.
Layered Architecture
μμ€ν μ κ΅¬μ± μμλ₯Ό κ°λ³ κ³μΈ΅μΌλ‘ ꡬμ±νλ μννΈμ¨μ΄ μν€ν μ² ν¨ν΄μ΄λ€. μ¬κΈ°μ κ° κ³μΈ΅μ νΉμ μ± μμ κ°μ§λ©° μ μ μλ λ°©μμΌλ‘ μΈμ ν κ³μΈ΅κ³Ό μνΈ μμ©νλ€. κ³μΈ΅νλ μν€ν μ²λ κ΄μ¬μ¬μ λΆλ¦¬, λͺ¨λμ μ€κ³ λ° μμ€ν μ μ μ§ κ΄λ¦¬ κ°λ₯μ±μ μ΄μ§νλ€.
Layered Architectureμμ κ° κ³μΈ΅μ κ΄λ ¨ κΈ°λ₯μ λ Όλ¦¬μ κ·Έλ£Ήμ λνλ΄λ©° νΉμ μμ μ§ν©μ λ΄λΉνλ©° κ°μ₯ μΌλ°μ μΈ κ³μΈ΅μ λ€μκ³Ό κ°λ€.
νλ μ ν μ΄μ κ³μΈ΅(Presentation Layer): μ¬μ©μ μΈν°νμ΄μ€ κ³μΈ΅μ΄λΌκ³ λ νλ μ΄ κ³μΈ΅μ μμ€ν κ³Ό μ¬μ©μ κ°μ μνΈ μμ©μ μ²λ¦¬νλ€. μ 보 νμ λ° μ¬μ©μ μ λ ₯ μΊ‘μ²μ μ€μ μ λλ€. νλ μ ν μ΄μ κ³μΈ΅μλ μΉ νμ΄μ§, λͺ¨λ°μΌ μ± νλ©΄ λλ λ°μ€ν¬ν± μ ν리μΌμ΄μ μΈν°νμ΄μ€μ κ°μ κ΅¬μ± μμκ° ν¬ν¨λ μ μλ€.
μ ν리μΌμ΄μ κ³μΈ΅(Application Layer): λΉμ¦λμ€ λ‘μ§ κ³μΈ΅μ΄λΌκ³ λ νλ μ ν리μΌμ΄μ κ³μΈ΅μλ μ ν리μΌμ΄μ μ ν΅μ¬ κΈ°λ₯κ³Ό κ·μΉμ΄ ν¬ν¨λμ΄ μλ€. μμ€ν μμ μννλ μ€μ λμ λ° μμ μ λνλ λλ€. νλ μ ν μ΄μ κ³μΈ΅μμ μμ²μ λ°μ μ²λ¦¬νκ³ νμν μμ μ μ€νμ μ‘°μ νλ€. μ΄ κ³μΈ΅μ λΉμ¦λμ€ λ Όλ¦¬, μν¬νλ‘ λ° μ ν¨μ± κ²μ¬ κ·μΉ ꡬνμ λ΄λΉνλ€.
λλ©μΈ κ³μΈ΅(Domain Layer): λλ©μΈ κ³μΈ΅μ λλ©μΈλ³ λ Όλ¦¬λ₯Ό μΊ‘μννκ³ λ¬Έμ λλ©μΈκ³Ό κ΄λ ¨λ κ°λ λ° μν°ν°λ₯Ό λνλ λλ€. μ¬κΈ°μλ μ ν리μΌμ΄μ μ λμμ μ μ΄νλ ββλΉμ¦λμ€ κ°μ²΄, μν°ν° λ° κ·μΉμ΄ ν¬ν¨λλ€. λλ©μΈ κ³μΈ΅μ νΉμ κΈ°μ μ΄λ νλ μμν¬μ λ 립μ μ΄λ©° μΈνλΌ λ° μ¬μ©μ μΈν°νμ΄μ€μ μΈλΆ μ¬νμ λν΄ λ 립μ μ΄μ΄μΌ νλ€.
λ°μ΄ν° μ‘μΈμ€ κ³μΈ΅(Data Access Layer): μ§μμ± κ³μΈ΅μ΄λΌκ³ λ νλ λ°μ΄ν° μ‘μΈμ€ κ³μΈ΅μ λ°μ΄ν° μ μ₯ λ° κ²μμ μ²λ¦¬νλ€. λ°μ΄ν°λ² μ΄μ€ λλ κΈ°ν λ°μ΄ν° μμ€μμ μνΈ μμ©μ μΆμννλ€. μ΄ κ³μΈ΅μ 쿼리 μ€ν, λ°μ΄ν° μ‘μΈμ€, λλ©μΈ κ°μ²΄ μ μ₯ λ° κ²μμ μν μΈν°νμ΄μ€ μ 곡μ λ΄λΉνλ€. λ°μ΄ν° μ μ₯ λ©μ»€λμ¦μ 볡μ‘μ±μΌλ‘λΆν° μμ κ³μΈ΅μ 보νΈνκ³ ν΅ν© λ°μ΄ν° μ‘μΈμ€ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
μΈνλΌ κ³μΈ΅(Infrastructure Layer): μΈνλΌ κ³μΈ΅μ μ ν리μΌμ΄μ κΈ°λ₯μ νμν κΈ°λ³Έ μλΉμ€ λ° μ νΈλ¦¬ν°λ₯Ό μ 곡νλ€. μ¬κΈ°μλ μΈλΆ μλΉμ€ ν΅ν©, νμΌ μμ€ν , λ€νΈμν¬ ν΅μ , λ‘κΉ , μΊμ± λ° λ³΄μκ³Ό κ°μ κ΅¬μ± μμκ° ν¬ν¨λλ€. μΈνλΌ κ³μΈ΅μ μμ κ³μΈ΅μ μ§μνκ³ μμ κ³μΈ΅μ΄ ν¨κ³Όμ μΌλ‘ μμ μ μνν μ μλλ‘ νλ€.
Layered Architectureμ μ£Όμ μ΄μ
λͺ¨λν λ° κ΄μ¬μ¬ λΆλ¦¬(Modularity and separation of concerns): Layered Architectureλ κ΄λ ¨ κΈ°λ₯μ λ³κ°μ κ³μΈ΅μΌλ‘ κ·Έλ£Ήννμ¬ κ΄μ¬μ¬λ₯Ό λͺ ννκ² λΆλ¦¬νλ€. μ΄λ₯Ό ν΅ν΄ κ° κ³μΈ΅μ λ 립μ μΌλ‘ κ°λ°νκ³ ν μ€νΈν μ μμΌλ―λ‘ μμ€ν μ λͺ¨λμ κ°λ° λ° μ μ§ κ΄λ¦¬κ° κ°λ₯νλ€.
μ μ°μ± λ° νμ₯μ±(Flexibility and scalability): Layered Architectureλ μ 체 μμ€ν μ μν₯μ μ£Όμ§ μκ³ κ°λ³ κ³μΈ΅μ κ΅μ²΄νκ±°λ μμ ν μ μλ μ μ°μ±μ νμ©νλ€. μλ‘μ΄ κ³μΈ΅μ μΆκ°νκ±°λ κΈ°μ‘΄ κ³μΈ΅μ μ κ±°νμ¬ λ³ννλ μꡬ μ¬νμ μμ©νκ±°λ μλ‘μ΄ κΈ°μ μ ν΅ν©ν μ μλ€. μ΄λ¬ν νμ₯μ±μ μκ°μ΄ μ§λ¨μ λ°λΌ μμ€ν μ΄ μ±μ₯νκ³ μ§ννλ λ° λμμ΄ λλ€.
μ½λ μ¬μ¬μ©μ±(Code reusability): μμ€ν μ λ μ΄μ΄λ‘ ꡬμ±νλ©΄ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ₯Ό μλ³νκ³ μ¬λ¬ λ μ΄μ΄ λλ νλ‘μ νΈμμ 곡μ ν μ μλ€. μ΄λ₯Ό ν΅ν΄ κ°λ° ν¨μ¨μ±μ΄ ν₯μλκ³ μ½λ μ€λ³΅μ΄ μ€μ΄λλλ€.
ν μ€νΈ κ°λ₯μ±(Testability): Layered Architectureλ ν μ€νΈ νλ‘μΈμ€λ₯Ό μ©μ΄νκ² νλ€. κ° κ³μΈ΅μ κ°λ³μ μΌλ‘ ν μ€νΈν μ μμΌλ―λ‘ λ³΄λ€ μ§μ€μ μ΄κ³ λμμ΄ μ§μ λ ν μ€νΈ μλ리μ€κ° κ°λ₯νλ€. λ¨μ ν μ€νΈ, ν΅ν© ν μ€νΈ λ° μ’ λ¨ κ° ν μ€νΈλ₯Ό κ° κ³μΈ΅μμ μννμ¬ μμ€ν μ΄ μ 체μ μΌλ‘ μ¬λ°λ₯΄κ² μλνλμ§ νμΈν μ μλ€.
Flux Architecture
Flux μν€ν μ²λ μΉ μ ν리μΌμ΄μ μμ λ°μ΄ν° νλ¦μ κ΄λ¦¬νκΈ° μν ν¨ν΄μ΄λ€. Facebookμμ κ°λ°νμΌλ©° μΌλ°μ μΌλ‘ νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν΄ Reactμ ν¨κ» μ¬μ©λλ€. Fluxλ λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ λ°λ₯΄λ―λ‘ λ³΅μ‘ν μν μνΈ μμ©μ κ΄λ¦¬νκ³ μμ© νλ‘κ·Έλ¨μ λ μ½κ² μ΄ν΄νκ³ λλ²κ·Έν μ μλ€.
Flux μν€ν μ²λ λ€μ λ€ κ°μ§ μ£Όμ ꡬμ±
Dispatcher: Dispatcherλ μ ν리μΌμ΄μ μ μ€μ νλΈ μν μ νλ€. μμ© νλ‘κ·Έλ¨μ λ€λ₯Έ λΆλΆμμ μμ μ μμ νκ³ μ μ ν μ μ₯μλ‘ λ°μ‘νλ€. μμ μ΄ μμ°¨μ μ΄κ³ κ²°μ μ μΈ λ°©μμΌλ‘ μ²λ¦¬λλλ‘ νλ€. Dispatcherλ λ±λ‘λ μ½λ°± λͺ©λ‘μ μ μ§ κ΄λ¦¬νκ³ μμ μ΄ λ°μ‘λ λ μ΄λ₯Ό μ리λ μν μ νλ€.
Actions: Actionsμ μ ν리μΌμ΄μ λ΄μμ λ°μνλ μ΄λ²€νΈ λλ μ¬μ©μ μνΈ μμ©μ λνλ λλ€. "μ¬μ©μκ° λ²νΌμ ν΄λ¦νλ€." λλ "μλ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμλ€."μ κ°μ΄ λ°μν μν©μ μ€λͺ νλ μΌλ° JavaScript κ°μ²΄μ΄λ€. μ‘μ μ μ‘μ κ°μ²΄ μμ±μ λ΄λΉνλ ν¬νΌ ν¨μμΈ μ‘μ μμ±μμ μν΄ μμ±λλ€. μμ μ΄ μμ±λλ©΄ Dispatcherλ‘ λ°μ‘λλ€.
Stores: Storesμλ μ ν리μΌμ΄μ μν λ° λΉμ¦λμ€ λ‘μ§μ΄ ν¬ν¨λλ€. λ°μ‘λ μμ μ μλ΅νκ³ κ·Έμ λ°λΌ λ΄λΆ μνλ₯Ό μ λ°μ΄νΈνλ€. Storesλ μ ν리μΌμ΄μ μ λ·°(κ΅¬μ± μμ)μ λν λ°μ΄ν° κ΄λ¦¬ λ° λ ΈμΆμ λ΄λΉνλ€. μμ μ μμ νκ³ μ μ νκ² μ²λ¦¬νκΈ° μν΄ Dispatcherμ λ±λ‘νλ€. Storesμ μνκ° λ³κ²½λλ©΄ λ·°μ μ리기 μν΄ λ³κ²½ μ΄λ²€νΈλ₯Ό λ΄λ³΄λ λλ€.
Views: μ’ μ’ React κ΅¬μ± μμλ‘ νμλλ Viewsλ Storesμμ μ 곡νλ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ λλ§νλ μν μ νλ€. κ΄μ¬ μλ 맀μ₯μ ꡬλ νκ³ λ³κ²½ μ΄λ²€νΈλ₯Ό μμ νλ€. Storesκ° λ³κ²½ μ΄λ²€νΈλ₯Ό λ΄λ³΄λ΄λ©΄ λ·°λ Storesμμ μ λ°μ΄νΈλ λ°μ΄ν°λ₯Ό κ²μνκ³ μ€μ€λ‘λ₯Ό λ€μ λ λλ§νλ€.
Flux μν€ν μ²μ λ°μ΄ν° νλ¦μ μ격ν λ¨λ°©ν₯ ν¨ν΄μ λ°λ₯Έλ€.
μ¬μ©μ μνΈ μμ© λλ μμ€ν μ΄λ²€νΈλ Dispatcherλ‘ λ°μ‘λλ μμ μ νΈλ¦¬κ±°νλ€.
Dispatcherλ μ‘°μΉλ₯Ό μμ νμ¬ μ μ ν μμ μΌλ‘ 보λ λλ€.
Storesλ μμ μ μ²λ¦¬νκ³ κ·Έμ λ°λΌ μνλ₯Ό μ λ°μ΄νΈνλ€.
Storesκ° μνλ₯Ό μ λ°μ΄νΈνλ©΄ λ³κ²½ μ΄λ²€νΈκ° λ°μνλ€.
Views(κ΅¬μ± μμ)λ μ΄λ¬ν λ³κ²½ μ΄λ²€νΈλ₯Ό μμ νκ³ μ μ₯μμμ μ λ°μ΄νΈλ λ°μ΄ν°λ₯Ό κ²μνλ€.
Viewsλ μ¬μ©μ μΈν°νμ΄μ€μ λ³κ²½ μ¬νμ λ°μνμ¬ μ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ€μ€λ‘λ₯Ό λ€μ λ λλ§νλ€.
Flux μν€ν μ² μ¬μ©μ μ΄μ
μμΈ‘ κ°λ₯ν λ°μ΄ν° νλ¦(Predictable data flow): Fluxμ λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ ν΅ν΄ λ°μ΄ν°κ° μμ© νλ‘κ·Έλ¨μ ν΅ν΄ μ΄λ»κ² λ³κ²½λκ³ νλ₯΄λμ§ λ μ½κ² μ΄ν΄ν μ μλ€. μ΄ μμΈ‘ κ°λ₯μ±μ λλ²κΉ μ λ¨μννκ³ μν λ³κ²½μ μμΈμ μλ³νλ λ° λμμ΄ λλ€.
μ€μνλ μν κ΄λ¦¬(Centralized state management): Flux Storesλ μ€μνλ λ°©μμΌλ‘ μ ν리μΌμ΄μ μνλ₯Ό ν¬ν¨νλ€. μ΄λ κ² νλ©΄ νΉν 볡μ‘ν λ°μ΄ν° μ’ μμ±μ΄ μλ λκ·λͺ¨ μ ν리μΌμ΄μ μμ μνλ₯Ό λ μ½κ² κ΄λ¦¬νκ³ μΆλ‘ ν μ μλ€.
μ μ§ λ³΄μμ±(Maintainability): Fluxμ κ΄μ¬μ¬ λΆλ¦¬λ₯Ό ν΅ν΄ λ λμ μ½λ κ΅¬μ± λ° λͺ¨λνκ° κ°λ₯νλ€. κ° κ΅¬μ± μμ(Dispatcher, Actions, Stores, Views)μλ νΉμ μ± μμ΄ μμΌλ―λ‘ μ½λλ² μ΄μ€λ₯Ό λ³΄λ€ μ½κ² ββμ μ§ κ΄λ¦¬νκ³ μμ ν μ μλ€.
νμ₯μ±(Scalability): Fluxλ λ§μ μμ λ°μ΄ν° λ° μν μνΈ μμ©μ΄ μλ 볡μ‘ν μ ν리μΌμ΄μ μ μ²λ¦¬νκΈ° μν νμ₯ κ°λ₯ν μν€ν μ²λ₯Ό μ 곡νλ€. λ¨λ°©ν₯ νλ¦ λ° μ€μ μ§μ€μ μν κ΄λ¦¬λ μ ν리μΌμ΄μ μ΄ μ±μ₯ν¨μ λ°λΌ νμ₯νλ λ° λμμ΄ λλ€.
useReducer
Reactμμ useReducer νν¬λ 볡μ‘ν μν λ° μν μ νμ λ³΄λ€ μ μ΄λκ³ μμΈ‘ κ°λ₯ν λ°©μμΌλ‘ κ΄λ¦¬ν μ μλ λ΄μ₯ ν¨μμ΄λ€. μ΄κ²μ useState νν¬μ λμμ΄λ©° μ¬λ¬ κ°μ΄ ν¬ν¨λ μνλ₯Ό μ²λ¦¬νκ±°λ μν μ νμ΄ μ΄μ μνλ₯Ό κΈ°λ°μΌλ‘ ν λ νΉν μ μ©νλ€.
useReducer νν¬λ 리λμ ν¨μμ μ΄κΈ° μνλΌλ λ κ°μ§ μΈμλ₯Ό μ¬μ©νλ€. reducer functionμ λ€λ₯Έ μμ μ λν μλ΅μΌλ‘ μνλ₯Ό μ λ°μ΄νΈνλ λ°©λ²μ μ§μ νλ μν μ νλ€. μ΄κΈ° μν μΈμλ μνμ μ΄κΈ° κ°μ μ€μ νλ€.
reducer ν¨μλ stateμ action λ κ°μ§ μΈμλ₯Ό λ°λλ€. action typeμ νμΈνκ³ κ·Έμ λ°λΌ νμν μν μ λ°μ΄νΈλ₯Ό μννλ€. reducer ν¨μλ μνκ° λ³κ²½λμ§ μλλΌλ νμ μλ‘μ΄ μν κ°μ²΄λ₯Ό λ°νν΄μΌ νλ€.
useReducerλ₯Ό μ¬μ© μ μ΄μ
볡μ‘ν μν κ΄λ¦¬(Complex state management): useReducerλ μ¬λ¬ κ° λλ 볡μ‘ν λ°μ΄ν° ꡬ쑰μ κ΄λ ¨λ μνλ₯Ό κ΄λ¦¬νλ λ° μ ν©νλ€. μ΄λ₯Ό ν΅ν΄ λ³΄λ€ λ³΅μ‘ν μν μ ν λ° λ Όλ¦¬λ₯Ό μ€μ μ§μ€μμΌλ‘ μ²λ¦¬ν μ μλ€.
μμΈ‘ κ°λ₯ν μ λ°μ΄νΈ(Predictable updates): μν μ νμ νΉμ ν¨ν΄μ λ°λ₯΄λ 리λμ ν¨μμ μν΄ κ²°μ λλ―λ‘ μνμ λν μ λ°μ΄νΈλ₯Ό λ μμΈ‘ κ°λ₯νκ³ μΆμ ν μ μλ€.
μ΅μ ν(Optimization): useReducerλ μ΄μ μνμ μμ‘΄νλ μν μ λ°μ΄νΈλ₯Ό μ²λ¦¬ν λ μ±λ₯μ μ΅μ νν μ μλ€. μ΄λ μν μ νμ΄ κ°μ₯ μ΅μ μνλ₯Ό κΈ°λ°μΌλ‘ νκ³ μ μ¬μ κ²½ν© μνλ₯Ό λ°©μ§νλλ‘ νλ€.
μν λ‘μ§ κ³΅μ (Sharing state logic): 리λμ κΈ°λ₯μ μ¬λ¬ κ΅¬μ± μμμμ μ¬μ¬μ©ν μ μμΌλ―λ‘ μ½λ 곡μ κ° κ°λ₯νκ³ μ€λ³΅μ΄ μ€μ΄λλλ€.
useReducerλ useStateμ κ°μ κ°λ¨ν μν κ΄λ¦¬ μ루μ μ λΉν΄ μΆκ°μ μΈ λ³΅μ‘μ±μ μ λ°ν μ μλ€λ μ μ μ μνλ κ²μ΄ μ€μνλ€. μΌλ°μ μΌλ‘ μν λ‘μ§μ΄ λ 볡μ‘ν΄μ§κ³ μν μ νμ λν μμΈ‘ κ°λ₯νκ³ μ μ΄λ μ κ·Ό λ°©μμ΄ νμν κ²½μ° 'useReducer'λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
useCallback
Reactμμ useCallback νν¬λ μ½λ°± ν¨μ μμ±μ λ©λͺ¨νκ³ μ΅μ ννλ λ° μ¬μ©λλ€. λ λλ§ μ±λ₯ μ΅μ ν λλ λΆνμν λ€μ λ λλ§ λ°©μ§μ κ°μ΄ μ°Έμ‘° λλ±μ±μ μμ‘΄νλ μμ κ΅¬μ± μμμ μ½λ°± ν¨μλ₯Ό μ λ¬νλ μλ리μ€μμ μ£Όλ‘ μ μ©νλ€.
κ΅¬μ± μμ λ΄μμ μ½λ°± ν¨μλ₯Ό μ μν λ ν΄λΉ ν¨μμ μ μΈμ€ν΄μ€κ° κ° λ λλ§μμ μμ±λλ€. μ΄λ‘ μΈν΄ ν¨μ λ‘μ§μ΄ λμΌνκ² μ μ§λλλΌλ μ΄λ¬ν μ½λ°±μ μμ‘΄νλ μμ κ΅¬μ± μμκ° λΆνμνκ² λ€μ λ λλ§λ μ μλ€. useCallbackμ μ’ μ νλͺ©μ΄ λ³κ²½λλ κ²½μ°μλ§ λ³κ²½λλ λ©λͺ¨νλ λ²μ μ μ½λ°± ν¨μλ₯Ό λ°ννμ¬ μ΄ λ¬Έμ λ₯Ό μννλ λ° λμμ΄ λλ€.
useCallback νν¬λ μ½λ°± ν¨μμ μ’ μμ± λ°°μ΄μ΄λΌλ λ κ°μ§ μΈμλ₯Ό μ¬μ©νλ€. μ’ μμ±μ λ©λͺ¨νλ μ½λ°±μ μ λ°μ΄νΈν΄μΌ νλ μκΈ°λ₯Ό κ²°μ νλ λ° μ¬μ©λλ€.
useCallback μ¬μ© μ μ΄μ
μ΅μ νλ μ±λ₯(Optimized performance): useCallbackμ μ½λ°± ν¨μλ₯Ό λ©λͺ¨νμ¬ μμ κ΅¬μ± μμμ λΆνμν μ¬λ λλ§μ λ°©μ§νλ λ° λμμ΄ λλ€. μ’ μμ±μ΄ λ³κ²½λ λλ§ μ½λ°±μ΄ λ€μ μμ±λλλ‘ νλ€.
λΆνμν ν¨μ μ¬μμ± λ°©μ§(Avoiding unnecessary function recreation): μ½λ°±μ νμ κ΅¬μ± μμμ μνμΌλ‘ μ λ¬ν λ useCallbackμ κ° λ λλ§μμ μ½λ°± μΈμ€ν΄μ€ μ¬μμ±μ λ°©μ§νμ¬ μ μ¬μ μΈ μ±λ₯ μ΅μ νλ‘ μ΄μ΄μ§ μ μλ€.
μμ λ μ°Έμ‘°(Stable references): useCallbackμ μ½λ°± ν¨μμ λν μμ μ μΈ μ°Έμ‘°λ₯Ό μ 곡νλ€. μ΄λ μ»΄ν¬λνΈ λ©λͺ¨λ₯Ό μν΄ 'React.memo'λ₯Ό μ¬μ©νκ±°λ μ΄λ²€νΈ 리μ€λμ μ½λ°±μ μ λ¬νλ κ²κ³Ό κ°μ΄ μ°Έμ‘°λ₯Ό λΉκ΅νλ μλ리μ€μμ μ€μν μ μλ€.
Last updated