πŸ“Œ Flux νŒ¨ν„΄

페이슀뢁이 전톡적인 MVC λ””μžμΈ νŒ¨ν„΄μ΄ λ³΅μž‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ ν•©ν•˜μ§€ μ•Šλ‹€κ³  νŒλ‹¨ν•˜μ—¬ μƒˆλ‘œμš΄ λ””μžμΈ νŒ¨ν„΄μ„ μ†Œκ°œν•œ 것이 λ°”λ‘œ 단방ν–₯ 데이터 흐름을 κ°–λŠ” Flux νŒ¨ν„΄μ΄λ‹€.

πŸ”₯ 문제점

Complicated MVC

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 규λͺ¨κ°€ 컀짐에 따라 μ–‘λ°©ν–₯ 데이터 흐름을 그림처럼 λ³΅μž‘ν•œ ꡬ쑰λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” μ—¬λŸ¬ Viewκ°€ μ—°κ²°λœ μ—¬λŸ¬ Model을 μ—…λ°μ΄νŠΈν•˜κ³  Model λ˜ν•œ μ—°κ²°λœ Viewλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 맀우 λ³΅μž‘ν•œ 상황이 λ°œμƒν•˜κΈ°μ— 데이터 흐름을 μ˜ˆμΈ‘ν•˜κΈ°λž€ 맀우 μ–΄λ €μ›Œμ§„λ‹€.

사싀 μœ„ 그림은 전톡적인 MVC νŒ¨ν„΄μ΄κ³  Apple의 MVC νŒ¨ν„΄μ€ μ‚¬μ§„μ²˜λŸΌ Modelκ³Ό View의 μ–‘λ°©ν–₯ 데이터 흐름이 λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. λ¬Έμ œλŠ” μ–‘λ°©ν–₯ 데이터 흐름이닀.

AppleMVC

πŸ¦– Flux μ•„ν‚€ν…μ²˜

flux

Flux νŒ¨ν„΄μ€ μ•±μ˜ 단방ν–₯ 데이터 흐름을 μ΄‰μ§„ν•˜λŠ” μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λ₯Ό λ§ν•œλ‹€.

Action

μ‚¬μš©μžμ˜ μš”μ²­μ„ μ •μ˜ν•œ 객체λ₯Ό λ§ν•œλ‹€.

  • μ‚¬μš©μž μš”μ²­ νƒ€μž…(Type)κ³Ό 데이터(Payload)λ₯Ό 가진닀.
  • μ•‘μ…˜ 크리에이터(Action Creator) ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ””μŠ€νŒ¨μ²˜λ‘œ μ „λ‹¬ν•œλ‹€.

Dispatcher

λ””μŠ€νŒ¨μ²˜λŠ” 쀑앙 데이터 흐름 κ΄€λ¦¬ν•œλ‹€. μŠ€ν† μ–΄μ— λ“±λ‘λœ μ•‘μ…˜ νƒ€μž…λ§ˆλ‹€ μ½œλ°±λ˜λŠ” ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€.

  • μ‚¬μš©μž μ•‘μ…˜μœΌλ‘œλΆ€ν„° 받은 μ•‘μ…˜ νƒ€μž…μ— λ§žλŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€.
  • μŠ€ν† μ–΄ 데이터 변경은 λ””μŠ€νŒ¨μ²˜λ₯Ό ν†΅ν•΄μ„œλ§Œ κ°€λŠ₯ν•˜λ‹€.

Store

μŠ€ν† μ–΄λŠ” μƒνƒœ(Model)λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œμ΄λ©° μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλŠ” μ½œλ°±μ„ 가진닀. 각 μ•‘μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” μ½œλ°±ν•¨μˆ˜λŠ” λ””μŠ€νŒ¨μ²˜μ— λ“±λ‘λœλ‹€.

  • μƒνƒœμ™€ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” ν•¨μˆ˜λ₯Ό 가진닀.
  • λ””μŠ€νŒ¨μ²˜μ— λ“±λ‘λœ μ½œλ°±ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄ μŠ€ν† μ–΄μ˜ μƒνƒœκ°€ λ³€κ²½λ˜λ©° View에 데이터가 λ³€κ²½λ˜μ—ˆμŒμ„ μ•Œλ¦°λ‹€.(μ˜΅μ €λ²„ νŒ¨ν„΄ ν™œμš©)

View

λ·°λŠ” μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ΄λ‹€. μŠ€ν† μ–΄μ—μ„œ μƒνƒœκ°€ λ³€κ²½λ˜μ—ˆλ‹€λŠ” μ•Œλ¦Όμ΄ 였면 λ·°λŠ” λ¦¬λ Œλ”λ§μ΄ λ°œμƒν•œλ‹€.

  • μ‚¬μš©μžλŠ” Viewλ₯Ό μ‘°μž‘ν•  수 있고 μƒνƒœ 변경을 μš”μ²­ν•˜λŠ” μ•‘μ…˜μ„ 생성할 수 μžˆλ‹€.
  • μƒμ„±λœ μ•‘μ…˜μ€ λ””μŠ€νŒ¨μ²˜μ—κ²Œ μ „λ‹¬λ˜κ³  λ””μŠ€νŒ¨μ²˜λŠ” ν•΄λ‹Ή μ•‘μ…˜μ— μ—°κ²°λœ μ½œλ°±μ„ μ‹€ν–‰ν•˜μ—¬ μŠ€ν† μ–΄μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•œλ‹€.
  • μƒνƒœκ°€ λ³€κ²½λ˜μ—ˆμŒμ„ λ·°μ—κ²Œ μ•Œλ¦¬κ³  λ·°λŠ” λ¦¬λ Œλ”λ§μ΄ λ°œμƒν•œλ‹€.