πλ€μ΄κ°κΈ°
μλ
νμΈμ Garrμ
λλ€
μ΄λ²μλ iOS κ°λ°μλΌλ©΄ νλ²μ―€μ μ¨λ³΄μμ μν€ν
μ²μ λν΄ μ΄μΌκΈ°νλ €κ³ ν©λλ€
μ λ μμ§κΉμ§ λ§μ κ²½νμ ν΄λ³΄μ§ λͺ»νμμ§λ§
λ§μ½ λκ΅°κ°κ° μ μκ² "λ νΈνκ² μ μ§λ³΄μνλ €λ©΄ μ΄λ€ κ²μ κ°μ νμ¬μΌνλμ?"
λΌκ³ μ§λ¬Ένλ€λ©΄ μλ§ νλ‘μ νΈμ λ§λ μν€ν
μ²λ₯Ό λ¨Όμ μ°Ύμ보λΌκ³ ν κ±°κ°μ΅λλ€
λ¬Όλ‘ ,μ λ κΈ°κ»ν΄λ΄μΌ MVVM μ λλ§ κ°λ¨ν μ¨λ³Έ iOS μ΄λ³΄μ§λ§ κ·Έλλ μ΄λ κ² μ μ΄λ΄ λλ€ κ·Έλ§νΌ μν€ν μ²κ° νλ‘μ νΈμμ μ€μνλ€κ³ λκΌκΈ°μ κΈ°λ‘ν΄λ³΄μ ν©λλ€
π 1. μν€ν μ²?
μ μκ² μμ΄ μν€ν
μ²λ λμλ₯Ό νλ μ§λκ²κ³Ό κ°λ€κ³ μκ°ν©λλ€
λ§μ½ λΉ΅μ§μμ μλΉμ΄ μκ³ λ³μμ΄ μλ€λ©΄ μ΄λ¨κ±°κ°λμ?
λ§λ μλκ² μ£ ? μ λ§ νΌλμ€λ¬μΈκ±°μμ
κ·Έλ κΈ°μ κ΅κ°λ λμλ₯Ό μ§μλ νμν κΈ°λ₯μ λλ μ μ§μ΅λλ€
νμν κΈ°λ₯,λͺ©μ μ λ°λ‘ λΆλ¦¬ν΄μ κ΄λ¦¬νλκ², κ·Έκ²μ΄ μν€ν
μ²λΌκ³ μκ°ν©λλ€
κ·Έλ κΈ°λλ¬Έμ νΌλμ΄ μ€μ§μκ² μν€ν
μ²λ₯Ό μ¬μ©ν΄μΌλλ€κ³ μκ°ν©λλ€
π 2. μν€ν μ² μ’ λ₯
μν€ν
μ²μλ μ λ§ λ§μ μ’
λ₯κ° μμ΅λλ€
μ§μ§ λ무 λ§μμ λ€ μ€λͺ
ν μ μμκ±°μμ
κ·Έλμ iOS κ°λ°μλΆλ€μ΄ λ§μ΄ μ¬μ©νλ μν€ν μ²λ₯Ό μμ£Όλ‘ μ΄μΌκΈ°νλ €κ³ ν΄μ
μ: MVC,MVVM,VIPERλ±λ±
MVC
MVCλ κ°μ₯ μ λͺ
ν μν€ν
μ²μ€ νλμ
λλ€ μ²μ μν€ν
μ²λ₯Ό λ€λ£¨λ κ°λ°μλΆμ΄λΌλ©΄
μ΄ MVCλ‘ μ
λ¬Έμ λ§μ΄ νλ€κ³ ν΄μ μ λ μ΄ MVCλ‘ μ
λ¬Ένμλ΅λλ€
iOSμμλ MVCκ° λκ°λΌκ³ λ΄λ 무방νλ°
μλνλ©΄ κΈ°μ‘΄μ MVCμ μ νμ΄ λ΄λμ MVCκ° λ€λ₯΄κΈ°λλ¬Έμ
λλ€

μ΄κ²μ κΈ°μ‘΄ MVCμ
λλ€
μ§§κ² μ€λͺ
νμλ©΄
Model (λͺ¨λΈ): λ°μ΄ν°μ λΉμ¦λμ€ λ‘μ§μ κ΄λ¦¬ν©λλ€. μ΄λ μ ν리μΌμ΄μ μ ν΅μ¬ λ°μ΄ν° ꡬ쑰λ₯Ό λνλ΄λ©°, λ°μ΄ν° λ³κ²½ λ° μ λ°μ΄νΈλ₯Ό λ΄λΉν©λλ€.
View (λ·°): μ¬μ©μ μΈν°νμ΄μ€λ₯Ό νμνκ³ λ°μ΄ν°λ₯Ό ννν©λλ€. λ·°λ λͺ¨λΈμ μνλ₯Ό νμνκ³ , μ¬μ©μ μ λ ₯μ λ°μ 컨νΈλ‘€λ¬μ μ λ¬ν©λλ€.
Controller (컨νΈλ‘€λ¬): λͺ¨λΈκ³Ό λ·° κ°μ μ€μ¬μ μν μ ν©λλ€. μ¬μ©μ μ λ ₯μ λ°μ λͺ¨λΈμ μ λ°μ΄νΈνκ³ , λͺ¨λΈμ λ³κ²½ μ¬νμ λ·°μ λ°μν©λλ€.
λΌκ³ ν©λλ€
κ·Έλ¬λ©΄ μ νμ MVCλ λκ° λ€λ₯ΌκΉμ?

μ΄κ²μ΄ μ νμ MVCμ
λλ€ λ μ°¨μ΄μΈμ§ μμκ² λμ?
λ°λ‘ Controllerκ° μ€μ¬μ μν μ νκ³ μλ€λ건λ°μ
κ·Έλ¬λ©΄ λκ° λ¬λΌμ§λλ? λ°λ‘ Viewμ Modelμ΄ μλ‘λ₯Ό λͺ¨λ₯΄κ² λ©λλ€ μ¦, λ
립μ±μ΄ 보μ₯λλ€λκ±°μ£
λ
립μ±μ΄ 보μ₯λλ©΄ λͺ¨λνμ μ¬μ¬μ©μ±μ΄ μ©μ΄ν΄μ§λλ°
μ½κ² λ§ν΄ λ
립μ μΈ λͺ¨λμ΄ ν
μ€νΈνκΈ° μ’κ³ λ€μ μ¬μ©νκΈ°λ νΈλ¦¬ν΄μ§λ€λκ±°μ£
μ μ§λ³΄μν λλ μ’κ³ μ κ·Έλ° μ΄μ λ‘ iOSμμλ μ νμ MVCκ° λ§μ΄ μ°μΈλ€λ μ κΈ°μ΅ν΄μ£Όμκ³ μ
MVVM
μ μ΄μ μ κ° κ°μ₯ μ¬μ©νκ³ μλ MVVMμ λν΄ μ΄μΌκΈ°ν΄λ³΄κ² μ΅λλ€

μ΄κ² λ°λ‘ MVVMμ
λλ€
Model (λͺ¨λΈ): λ°μ΄ν°μ λΉμ¦λμ€ λ‘μ§μ κ΄λ¦¬ν©λλ€.
View (λ·°): μ¬μ©μ μΈν°νμ΄μ€λ₯Ό νμνκ³ μ¬μ©μ μ λ ₯μ λ°μ΅λλ€.
ViewModel (λ·°λͺ¨λΈ): λ·°μ λͺ¨λΈ μ¬μ΄μμ μ€μ¬μ μν μ νλ©° λ°μ΄ν°λ₯Ό κ°κ³΅νμ¬ λ·°μ μ 곡ν©λλ€.
μκΉ λ³΄μλ MVCμ λ€λ₯΄κ² λ·°μ λͺ¨λΈ μ¬μ΄μ ViewModelμ΄λΌλκ²μ΄ λ€μ΄κ°λ€λκ² νΉμ§μΈλ°μ
μ΄ ViewModelμ΄ μ€μ¬μ μν μ ν΄μ£ΌκΈ°λλ¬Έμ UIμ€μ¬μ μΈ μ±μμ λ°μ΄ν°μ UIλ₯Ό κ΄λ¦¬νκΈ° μ μ©νλ€λ μ₯μ μ΄ μμ΅λλ€
VIPER
μ΄κ±΄ μμ§ μ λ μ΄λ‘ μ΄ν΄λ§ νμ§ μ€μ νλ‘μ νΈμμ μ¬μ©ν΄λ³Έμ μ΄ μλ μν€ν
μ²μ
λλ€
μ΄ μν€ν
μ²μ μ¬μ©νκ² λλ€λ©΄ κ·Έ νλ‘μ νΈλ μλ§ κ±°μ λν νλ‘μ νΈμΌκ²λλ€..

V (View): μ¬μ©μ μΈν°νμ΄μ€(UI)λ₯Ό λνλ λλ€.
I (Interactor): λ°μ΄ν° λ° λ€νΈμνΉκ³Ό κ΄λ ¨λ λΉμ¦λμ€ λ‘μ§μ ν¬ν¨ν©λλ€. μν°ν°(Entities)μ μΈμ€ν΄μ€λ₯Ό μμ±νκ±°λ μλ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ μν μ ν©λλ€.
P (Presenter): UIμ κ΄λ ¨λ λΉμ¦λμ€ λ‘μ§μ λ΄λΉν©λλ€. λ·°μ μΈν°λν°λ₯Ό μ°κ²°νλ©° μ¬μ©μ μ λ ₯μ μ²λ¦¬νκ³ , νλ©΄μ λ°μ΄ν°λ₯Ό νμνκΈ° μν΄ μΈν°λν°λ‘λΆν° λ°μ΄ν°λ₯Ό κ°μ Έμ΅λλ€.
E (Entities): λ¨μν λ°μ΄ν° κ°μ²΄λ‘, λ°μ΄ν°μ ꡬ쑰λ₯Ό λνλ λλ€. λ°μ΄ν° μ κ·Ό λ μ΄μ΄κ° μλλ©°, λ°μ΄ν°μ μ€μ λ΄μ©κ³Ό ꡬ쑰λ₯Ό λνλ λλ€.
R (Router): VIPER λͺ¨λ κ°μ νλ©΄ μ νκ³Ό κ΄λ ¨λ μ± μμ μ§λλλ€. λ€λ₯Έ VIPER λͺ¨λλ‘μ μΈκ·Έλ¨ΌνΈ(νλ©΄ μ ν)λ₯Ό κ΄λ¦¬νκ³ μ‘°μ ν©λλ€.
κ·Έλ₯ μ΄ν΄νκΈ° νΈνκ² κΈμ μμλλ‘ λμ΄ν΄λ³΄μμ΅λλ€ μμ§ν μ΄λ €μ΄κ² λ§μ΅λλ€...
μμ λ§ν μν€ν
μ²λ€μ ꡬμ±μμκ° 3κ°μ§λ‘ λλμ΄μ§μ§λ§ μ΄ μν€ν
μ²μ κ²½μ° 5κ°λ λμ΄μ λμ± λ³΅μ‘ν΄μ§λλ€
μ΄ μν€ν μ²λ λμ€μ 곡λΆν΄μ μ€μ λ‘ μ¬μ©ν΄λ³΄κ³ λ€μ νλ² μ μ΄λ³΄λλ‘ νκ² μ΅λλ€
π 3. μν€ν μ² μ μ¬μ©ν΄μΌν κΉ?
μ΄λ κ² μν€ν
μ²μ κ°λ
μ μμ보μλλ° μ΄λ€ μν€ν
μ²κ° λ§μμ λμ
¨λμ?
μν€ν
μ²λ₯Ό μ¬μ©ν΄μΌνλ μ΄μ λ νΈλ¦¬ν μ μ§λ³΄μ, μ½λ νμ§μ ν₯μΉλ±μ μ΄μΌκΈ° ν μμμκ±°κ°μ΅λλ€
μ κ·Έμ€μμλ μ μ§λ³΄μκ° νΈνμ μ΄ λ§μμ λ€μ΄μ λ€μν μν€ν
μ²λ₯Ό 곡λΆν΄λ³΄κ³ νλ‘μ νΈμ μ μ©ν΄λ³΄κ³ μμ΄μ
λ§μ΄ 볡μ‘νμ§λ§ ν₯λ―Έλ‘κ³ λ λ°°μλλ©΄ μ΄λκ°μ 무μλ μλΉνλκ²κ°μ΅λλ€
λ λ€μν μν€ν
μ²λ 곡λΆν΄λ³΄κ³ μΆλ€μ..
κ·ΈλΌ λ€μμ λ μ μ΅ν λ΄μ©μ 곡λΆν΄μ κ°μ Έμ€λλ‘ νκ² μ΅λλ€
κ°μ¬ν©λλ€
κΈ μΌλΆ λ° μ΄λ―Έμ§ μΆμ²: https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52#.wtcp3gqzw