λμμΈ ν¨ν΄μ μ μ, μμ κ·Έλ¦¬κ³ λΆλ₯μ λν΄μ μ 리. iOS μ± κ°λ°μμ μ±κΈν΄ ν¨ν΄μ΄ μ μ©λ μ¬λ‘λ₯Ό μ€μ¬μΌλ‘ νμ΅ν΄λ³΄μ!
1μ₯μμ μμ μ¬μ μ±μ λ§λ€λ©΄μ μλμ λ΄μ©λ€μ νμ΅νμ΅λλ€.
- μμ (Asset) - μ± μμ΄μ½, μ΄λ―Έμ§ νμΌ, λ°μ΄ν° νμΌμ κ΄λ¦¬, μ± μ€νμ νμΌμ μ½κ² μ κ·Όν μ μλλ‘ λμμ€λ€.
- μ± μλ(App thinning)κ³Ό μ± μ¬λΌμ΄μ±(App slicing) - λ€μν λλ°μ΄μ€μμ λΉ λ₯΄κ² λ€μ΄λ‘λν μ μλλ‘ νλ μ΅μ ν κΈ°μ
- Cocoa Touch, UIKit, Foundation - iOS μ± κ°λ°μ νμν νλ μμν¬
- Autolayout μ μ μ©νλ©° UIλ₯Ό κ°λ°νλ λ² - μΈν°νμ΄μ€ λΉλ vs μ½λλ‘ μμ±
- iOSμ View μ²΄κ³ - λ·° κ³μΈ΅, λ·°μ μ’ν, νλ μ vs λ°μ΄λ, λ·° κ³μΈ΅ λλ²κΉ ν΄
- λμμΈ ν¨ν΄κ³Ό MVC ν¨ν΄ - μ±κΈν΄ ν¨ν΄κ³Ό μ±κ°λ°μμμ MVC ν¨ν΄μ μ€μ μ μΌλ‘
- AVAudioPlayer, Timer - μμ
νμΌμ μ¬μνκΈ° μν AVAudioPlayer, μκ°μ΄λ₯Ό μ¬κΈ° μν Timer
π‘ λμμΈ ν¨ν΄
νλ‘κ·Έλλ°μμ νΉμ μν©μ ν΄κ²°νλ λ°©λ²(ν¨ν΄)μ μ νννλ κ²μ λμμΈ ν¨ν΄μ΄λΌκ³ νλ€. μ μ¬ν μν©μμ μ¬μ©λλ λμμΈ ν¨ν΄μ μμ§ν΄λλ©΄, λΉμ·ν μν©μ λ§μ£Όνμ λ λΉ λ₯΄κ³ μ μ°νκ² λμ²ν μ μλ€.
π£ λμμΈ ν¨ν΄μ μμ
κ°μ²΄μ§ν₯μ€κ³λ₯Ό μν 23κ°μ ν¨ν΄μ κΈ°μ ν "λμμΈ ν¨ν΄(Design Pattern)" μ±
μ΄ μΆκ°λλ©΄μλΆν° λμμΈ ν¨ν΄μ΄ νλκ² μ¬μ©λκΈ° μμνλ€.
π λμμΈ ν¨ν΄μ μ μ
GoF, "νΉμ ν μν©μμ μΌλ°μ μ€κ³λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μνΈκ΅λ₯νλ μμ κ°λ₯ν κ°μ²΄μ ν΄λμ€λ€μ λν μ€λͺ μ΄λ€."
--- GoF (Gang of Four) :: λμμΈ ν¨ν΄ μ± μ μ μλ€
λΌλ§(C. Larman), "μλ ¨λ κ°μ²΄μ§ν₯ κ°λ°μ λ° κΈ°ν μννΈμ¨μ΄ κ°λ°μλ μννΈμ¨μ΄ κ°λ°μ κ°μ΄λλΌμΈμ΄ λλ μΌλ°μ μΈ μμΉλ€κ³Ό κ΄μ©μ μΈ ν΄κ²°μ± λ€μ λ νΌν 리(repertoire)λ₯Ό ꡬμΆνλ€. ν¨ν΄μ μ΄λ¬ν μμΉλ€κ³Ό κ΄μ©μ ν΄κ²°μ± λ€μ΄ λ¬Έμ μ ν΄κ²°μ± μ κΈ°μ νλ ꡬ쑰μ μΈ ννλ‘ μ²΄κ³νλκ³ λͺ λͺ λ κ²μ΄λ€."
λμμΈ ν¨ν΄μ μ₯μ
- νΉμ λ¬Έμ ν΄κ²°μ μν΄ κ°μ ν¨ν΄μΌλ‘ μ κ·Όνλ©° λ Όμνλ©΄ μννκ² μμ¬μν΅ ν μ μλ€.
- κ²μ¦λ λμμΈ ν¨ν΄μ μ¬μ©ν΄ λΉ λ₯Έ μκ°λ΄μ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΄ κ°λ° λΉμ©μ΄ μ κ² λ λ€.
- ν¨ν΄μ΄ μ μ©λ μ€κ³λ μν€ν μ²μ κ²½μ°, ν¨ν΄μ μκ³ μλ€λ©΄ μννΈμ¨μ΄ ꡬ쑰λ₯Ό λΉ λ₯΄κ² μ΄ν΄ν μ μλ€.
π λμμΈ ν¨ν΄μ μ’ λ₯
μννΈμ¨μ΄ κ°λ°μ κ³ λ―Όνλ κ²λ€μΈ "μ΄λ€ ν΄λμ€λ₯Ό λ§λ€μ§, μ΄λ μμ μ κ°μ²΄λ₯Ό μμ±νκ³ μλ©Έμν¬μ§, λ°μ΄ν°λ₯Ό μ΄λ»κ² λ°μμ μ²λ¦¬ν μ§, ꡬ쑰 μ€κ³λ₯Ό μ΄λ»κ² ν μ§" λ±μ μν©μ λ§λ λμμΈ ν¨ν΄λ€μ΄ μλ€.
GoF λ λμμΈ ν¨ν΄μ λͺ©μ κ³Ό λ²μλ‘ λΆλ₯νλ€. λͺ©μ μ ν¨ν΄μ΄ 무μμ νλμ§ μ μνλ κ²μΌλ‘, μμ±, ꡬ쑰, νμλ‘ λλλ€.
- μμ± ν¨ν΄ (Cretional Pattern) : κ°μ²΄μ μμ± κ³Όμ μ κ΄λ ¨, κ°μ²΄ μμ± μ μ μ°μ±μ λμ΄κ³ μ½λμ μ μ§λ³΄μμ λμμ μ€λ€.
- ꡬ쑰 ν¨ν΄ (Structural Pattern) : ν΄λμ€λ κ°μ²΄μ ꡬμ±μ ν΅ν΄ λ ν° κ΅¬μ‘°λ‘ λ§λ€ μ μκ² ν΄μ£Όλ κ²κ³Ό κ΄λ ¨λ ν¨ν΄
- νμ ν¨ν΄ (Behavioral Pattern) : ν¨ν΄μ μ£Όλ‘ ν΄λμ€μ μ μ©νλμ§ or κ°μ²΄μ μ μ©νλμ§ λ°λΌ ꡬλΆλλ€.
λ²μλ ν¨ν΄μ ν΄λμ€μ μ μ©νλμ§, κ°μ²΄μ μ μ©νλμ§μ λ°λΌ "ν΄λμ€ ν¨ν΄", "κ°μ²΄ ν¨ν΄" μΌλ‘ λλλ€.
- ν΄λμ€ : ν΄λμ€μ νμ ν΄λμ€ κ°μ κ΄κ³λ₯Ό λ€λ£¨λ ν¨ν΄, μ»΄νμΌ μ κ΄κ³κ° κ²°μ λλ€.
- κ°μ²΄ : κ°μ²΄ κ°μ κ΄κ³λ₯Ό λ€λ£¨λ ν¨ν΄, λ¬λνμμ κ΄κ³κ° μμ±λμ΄ λμ μ΄κ³ μ μ°νλ€.
1. μ±κΈν΄ ν¨ν΄(Singleton Pattern)
- λͺ©μ : μμ±, λ²μ : κ°μ²΄
- νΉμ ν΄λμ€μ μΈμ€ν΄μ€κ° μ€μ§ νλμμ 보μ₯νκ³ μ΄ μΈμ€ν΄μ€μ μ κ·Όν λ°©λ²μ μ 곡νλ€.
- κ°μ²΄λ μ¬λ¬λ² μμ±λμ§ μκ³ , μ΅μ΄ νλμ μΈμ€ν΄μ€λ§ μμ±νλ€. μ΄ν ν΄λΉ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ€.
- μ μμ μΌλ‘ νλμ μΈμ€ν΄μ€λ§ μ¬μ©νκ³ μΆμ κ²½μ° μ¬μ©νλ€.
- μ±κΈν΄ ν΄λμ€λ νΈμΆνλ κ³³μμ μΈμ€ν΄μ€ 볡μ¬(copying), μ μ§(retaining), ν΄μ (releasing) μ λ°©μ§νκ³ μλ€.
iOS μ ν리μΌμ΄μ μμ μ±κΈν΄ ν¨ν΄μ΄ μ°μ΄λ κ³³μ λ€μκ³Ό κ°λ€.
- νμΌ μ κ·Όμ λλ FileManager ν΄λμ€μ κ°μ²΄ -- FileManager.default
- μ±μ μ€μ μ μ΄λ₯Ό νλ UIApplication ν΄λμ€μ κ°μ²΄ -- UIApplication.shared
- μ± μ€μ λ± Key-value ννμ λ°μ΄ν°λ₯Ό μ§μμ μΌλ‘ μ μ₯νλ UserDefaults ν΄λμ€μ κ°μ²΄ -- UserDefaults.standard
- λ±λ‘λ μλ¦Όμ μ 보λ₯Ό μ¬μ©ν μ μκ² ν΄μ£Όλ NotificationCenter ν΄λμ€μ κ°μ²΄ -- NotificationCenter.default
- νλμ¨μ΄μ κ°μλ κ°μ μλ €μ£Όλ CMMotionManager ν΄λμ€ -- κ°μ²΄λ₯Ό λ¨ νλλ§ λ§λ€λΌκ³ λͺ
μλμ΄μμ.
--- λ¬Έμμ λνλ UIAccelerometer λ Deprecated class μ΄λ€.
2. νΌμ¬λ ν¨ν΄ (Facade Pattern)
- λͺ©μ : ꡬ쑰, λ²μ : κ°μ²΄
- Facade :: 창ꡬ, μλ©΄ => Facade Pattern μ ν΅ν΄ μμ€ν μ μλ΄μ μν μ μ 곡νλ€.
- μλ‘ κ΄λ ¨μκ³ λ³΅μ‘νκ² μ½νμλ ν΄λμ€λ€μ μ 리ν΄μ μμ λ 벨μ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
- μμ€ν μ 볡μ‘μ±μ μ€μ΄κΈ° μν΄ μλΈ μμ€ν μ ꡬ쑰ννκ³ , μλΈ μμ€ν μΌλ‘μ μ κ·Όμ νλμ νΌμ¬λ κ°μ²΄λ‘ μ 곡νλ ν¨ν΄μ΄λ€.
- => μΈν°νμ΄μ€ μ¬μ©μ κ°λ¨νκ² νλ€.
3. μ΅μ λ² ν¨ν΄ (Observer Pattern)
- λͺ©μ : νμ, λ²μ : κ°μ²΄
- Observer :: κ΄μ°°μ => Observer Pattern μ ν΅ν΄ κ°μ²΄μ μν λ³νλ₯Ό κ΄μ°°νλ€.
- κ°μ²΄μ μ΅μ λ²λ€μ λ±λ‘νμ¬ μν λ³νκ° μμ λ, λ©μλ λ±μ ν΅ν΄ κ°μ²΄κ° κ° μ΅μ λ²μμ ν΅μ§νλλ‘ νλ ν¨ν΄μ΄λ€.
4. μ€νΈλν°μ§ ν¨ν΄ (Strategy Pattern)
- λͺ©μ : νμ, λ²μ : κ°μ²΄
- μκ³ λ¦¬μ¦μ λ΄λΉνλ ν΄λμ€λ₯Ό λΆλ¦¬ν΄, μ± μμ λΆμ°μν€λ ν¨ν΄μ΄λ€.
5. ν©ν 리 ν¨ν΄ (Factory Pattern)
- λͺ©μ : μμ±, λ²μ : ν΄λμ€
- κ°μ²΄ μμ± μΈν°νμ΄μ€λ₯Ό μ μνμ§λ§, μμ±ν μ§ μ¬λΆλ νμ ν΄λμ€μ μ± μμ λκΈ°λ ν¨ν΄μ΄λ€.
- μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄λ΄λ 곡μ₯(Factory) λ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±νλ€κ³ μκ°νμ !
- ν μ§ν© λ΄μ μλ ν΄λμ€λ€μ μμ±μ ν κ³³μμ μ²λ¦¬νκ³ μΆμ λ μ¬μ©νλ€.
6. μ΄λν° ν¨ν΄ (Adapter Pattern)
- λͺ©μ : ꡬ쑰, λ²μ : ν΄λμ€, κ°μ²΄
- μ΄λν° ν¨ν΄μ λ°λ‘ μ¬μ©μ΄λ μμ μ΄ λΆκ°λ₯ν, νΈνμ±μ΄ μλ μΈν°νμ΄μ€λ₯Ό λ€λ₯Έ μΈν°νμ΄μ€λ‘ λ³νν΄μ£Όλ μν μ νλ€.
- ν΄λμ€ μμ, μμ(delegate, λ©μλμ μ€μ μ²λ¦¬λ₯Ό λ€λ₯Έ μΈμ€ν΄μ€μ λ©μλμ 맑κΉ) λ±μ λ°©λ²μ ν΅ν΄ λ³ννλ€.
μ°Έκ³ λ§ν¬
'π iOS > UIKit' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] FLO μ± κ°λ° μΌμ§ #1. MVVM ν¨ν΄κ³Ό Data Binding (0) | 2021.06.29 |
---|---|
[iOS] MVC ν¨ν΄ (Model - View - Controller) (0) | 2021.06.18 |
[iOS] View μ²΄κ³ - Window&View, Frame vs Bounds, λλ²κΉ ν΄ (0) | 2021.06.16 |
[iOS] Autolayout μ μ μ©νλ©° UIλ₯Ό κ°λ°νλ λ² (2) | 2021.06.13 |
[iOS] iOS μ± κ°λ° νλ μμν¬ - CocoaPod, UIKit, Foundation (0) | 2021.06.13 |