μν μ 보λ₯Ό νμΈνκ³ μλ§€κΉμ§ μ§νν μ μλ iOS μν μλ§€ μ± μ
λλ€.
TMDB APIλ₯Ό νμ©ν΄ μν λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ , CoreDataλ₯Ό ν΅ν΄ μλ§€ μ 보λ₯Ό μ μ₯νλλ‘ κ΅¬ννμ΅λλ€.
μ΄ νλ‘μ νΈλ iOSμμ μ€μ μν μλ§€ μλΉμ€μ νλ¦μ κ°λ¨νκ² κ΅¬ννλ κ²μ λͺ©νλ‘ ν©λλ€.
μ¬μ©μλ λ€μκ³Ό κ°μ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
νμ¬ μμ μ€ / μΈκΈ° / κ°λ΄ μμ μν μ‘°ν
μν μμΈ μ 보 νμΈ
μν μλ§€ μ§ν
μ’μ μ ν
μλ§€ μ 보 μ μ₯
λ‘κ·ΈμΈ
첫 νλ©΄
κ²μνμ΄μ§
μμΈνμ΄μ§
λ§μ΄νμ΄μ§
νκ²½μ€μ
μλ§€νμ΄μ§
μ’μ μ ν
리뷰μμ±νμ΄μ§
μλ§€λ΄μ&리뷰νμ΄μ§
κΈ°μ
μ€λͺ
UIKit
iOS UI ꡬμ±
MVVM
Viewμ λΉμ¦λμ€ λ‘μ§ λΆλ¦¬
SnapKit
AutoLayout μ½λ κΈ°λ° μμ±
CoreData, UserDefaults
λ°μ΄ν° μ μ₯
Kingfisher
μ΄λ―Έμ§ λΉλκΈ° λ€μ΄λ‘λ λ° μΊμ±
TMDB API
μν λ°μ΄ν° μ 곡
URLSession
λ€νΈμν¬ν΅μ
MVVM (Model - View - ViewModel)
μ΄ νλ‘μ νΈλ MVVM μν€ν
μ² ν¨ν΄ μ κΈ°λ°μΌλ‘ ꡬνλμμ΅λλ€.
βββ Config.xcconfig
βββ MovieBooking
βΒ Β βββ Model
βΒ Β βββ Network
βΒ Β βββ Util
βΒ Β βββ View
βΒ Β βββ ViewController
βΒ Β βββ ViewModel
βββ README.md
π ν΅μ¬ ꡬν λ΄μ©
1. λ‘κ·ΈμΈ / νμκ°μ
νλ©΄
μ± μ§μ
μ λ‘κ·ΈμΈ νλ©΄μ΄ λ¨Όμ λνλλλ‘ κ΅¬μ±νμ΅λλ€.
νμκ°μ
νλ©΄μμ μμ΄λμ λΉλ°λ²νΈλ₯Ό μ
λ ₯λ°μ κ³μ μ μμ±ν μ μλλ‘ κ΅¬ννμ΅λλ€.
λ‘κ·ΈμΈ μλ£ μ UserDefaultsμ μμ΄λμ λΉλ°λ²νΈλ₯Ό μ μ₯νμ¬, μ΄ν μ± μ€ν μ μλμΌλ‘ μ
λ ₯λλλ‘ μ²λ¦¬νμ΅λλ€.
μμ΄λμ λΉλ°λ²νΈ μ
λ ₯κ°μ λν΄ μ ν¨μ± κ²μ¬λ₯Ό μ μ©νμ¬ μ¬λ°λ₯Έ νμμΌλ‘λ§ νμκ°μ
λ° λ‘κ·ΈμΈμ΄ κ°λ₯νλλ‘ νμ΅λλ€.
λ‘κ·ΈμΈ μ±κ³΅ ν TabBar κΈ°λ° λ©μΈ νλ©΄μΌλ‘ μ΄λνλλ‘ νλ¦μ μ€κ³νμ΅λλ€.
2. μν λͺ©λ‘ νμ΄μ§
TabBarμ 첫 λ²μ§Έ νλ©΄μΌλ‘, TMDB APIλ₯Ό ν΅ν΄ μν λͺ©λ‘ λ°μ΄ν°λ₯Ό κ°μ Έμ€λλ‘ κ΅¬ννμ΅λλ€.
UICollectionViewλ₯Ό νμ©ν΄ μν ν¬μ€ν°λ₯Ό κ°λ‘ μ€ν¬λ‘€ ννλ‘ νμνμ΅λλ€.
νμ¬ μμμ, μΈκΈ° μν, κ°λ΄ μμ μ λ± μ¬λ¬ μν λͺ©λ‘μ νλ©΄μ ꡬμ±ν μ μλλ‘ μ€κ³νμ΅λλ€.
μ¬μ©μκ° ν¬μ€ν°λ₯Ό μ ννλ©΄ μν μμΈ νλ©΄μΌλ‘ μ΄λν μ μλλ‘ μ°κ²°νμ΅λλ€.
3. μν μΈλΆ νμ΄μ§
μν λͺ©λ‘ λλ κ²μ κ²°κ³Όμμ νΉμ μνλ₯Ό μ ννλ©΄ μμΈ νμ΄μ§λ‘ μ΄λνλλ‘ κ΅¬ννμ΅λλ€.
μν ν¬μ€ν°, μ λͺ©, μ₯λ₯΄, κ°λ΄μΌ, μ€κ±°λ¦¬ λ± μ£Όμ μ 보λ₯Ό νλ©΄μ νμνμ΅λλ€.
μ νν μν μ 보λ₯Ό λ€μ μλ§€ νλ©΄μΌλ‘ μμ°μ€λ½κ² μ λ¬ν μ μλλ‘ λ°μ΄ν° νλ¦μ ꡬμ±νμ΅λλ€.
4. μν μλ§€ μ
λ ₯ νμ΄μ§
μν μμΈ νμ΄μ§μμ μλ§€ λ²νΌμ λλ₯΄λ©΄ μλ§€ μ
λ ₯ νλ©΄μΌλ‘ μ΄λνλλ‘ κ΅¬ννμ΅λλ€.
μνκ΄, λ μ§, μκ°, μΈμ μ, μ’μ λ± μλ§€μ νμν μ 보λ₯Ό μ
λ ₯ν μ μλλ‘ κ΅¬μ±νμ΅λλ€.
κ²°μ νκΈ° λ²νΌμ λλ₯΄λ©΄ μλ§€ λ΄μμ΄ μ μ₯λκ³ , μ΄ν λ§μ΄νμ΄μ§μμ νμΈν μ μλλ‘ μ°κ²°νμ΅λλ€.
μλ§€ κ³Όμ μμ μ νν λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ νλ©΄ μνλ₯Ό κ°±μ νλλ‘ κ΅¬ννμ΅λλ€.
5. μν κ²μ νμ΄μ§
TabBarμ λ λ²μ§Έ νλ©΄μΌλ‘, μ¬μ©μκ° μ
λ ₯ν ν
μ€νΈλ₯Ό κΈ°μ€μΌλ‘ μνλ₯Ό κ²μν μ μλλ‘ κ΅¬ννμ΅λλ€.
κ²μ κ²°κ³Όλ UICollectionViewλ₯Ό νμ©ν΄ μν ν¬μ€ν° ννλ‘ νμνμ΅λλ€.
κ²μμ΄λ₯Ό ν¬ν¨ν μν λ°μ΄ν°λ₯Ό APIμμ λ°μμ νλ©΄μ λ°μνλλ‘ κ΅¬μ±νμ΅λλ€.
κ²μ κ²°κ³Όμμ μνλ₯Ό μ ννλ©΄ μμΈ νμ΄μ§λ‘ μ΄λν μ μλλ‘ μ°κ²°νμ΅λλ€.
TabBarμ μΈ λ²μ§Έ νλ©΄μΌλ‘, μ¬μ©μ κ³μ μ 보μ μλ§€ λ΄μμ νμΈν μ μλλ‘ κ΅¬μ±νμ΅λλ€.
νμκ°μ
μ μ
λ ₯ν μ¬μ©μ μ 보λ₯Ό νμν μ μλλ‘ UserDefaults κΈ°λ°μΌλ‘ λ°μ΄ν°λ₯Ό κ΄λ¦¬νμ΅λλ€.
μ¬μ©μκ° κ²°μ ν μν μλ§€ λ΄μμ νμΈν μ μλλ‘ μ μ₯ λ° μ‘°ν κΈ°λ₯μ ꡬννμ΅λλ€.
μ¬μ©μ μ 보μ μλ§€ λ΄μμ ν νλ©΄μμ νμΈν μ μλλ‘ λ§μ΄νμ΄μ§ ꡬ쑰λ₯Ό μ€κ³νμ΅λλ€.
μ₯μμ¬: μ΄λ―Έ μλ§€νκΈ° μ°½μμ λ°μ΄ν° μ μ₯κΉμ§ ꡬνμ λ§μ³€μ΄μ μΆκ°κΈ°λ₯μΌλ‘ μνκ΄ μ’μλ·°λ₯Ό ꡬνν λ λ°μ΄ν° νλ¦μ΄ μ΄λ €μ μ΅λλ€.
μμλΉ: λ μ΄μμ ꡬμ±μ μ΄λ»κ² νλ κ² μ’μκΉμ λν κ³ λ―Όμ΄ λ§μλ€. λν, "Entityμ Attribute μ€μ μ μλͺ»νμ λ, μ΄λ»κ² μμ μ ν΄μΌν κΉ?"μ "λ€λ₯Έ Entityλ₯Ό JOIN νλ λ°©λ²μ μμκΉ?"λ₯Ό μκ°ν΄λ³΄μλ€.
μ₯μμ¬: MVVM ꡬ쑰λ₯Ό μ μ©νκ³ μ’μ μ ν λ° μλ§€ κΈ°λ₯μ ꡬννμ¬ μ€μ μ±κ³Ό μ μ¬ν νλ¦μ μμ±νμ΅λλ€!! νμꡬνκΉμ§κ° λͺ©νμμ§λ§ μΆκ° ꡬνκΉμ§ λλ΄μ κΈ°μ©λλ€
μμλΉ: CoreDataλ₯Ό μ€κ³νκ³ μ¬μ©νλ©΄μ μ΅μν΄μ§ κ² κ°λ€. λν, MVVMλ μ§λ κ³Όμ κΉμ§λ μ μ©νκΈ°κΉμ§ μκ°μ΄ κ½€ μ€λκ±Έλ Έλλ°, μμ§ MVC -> MVVMμΌλ‘ 리ν©ν λ§νλ κ³Όμ μ κ±°μΉλ κ²μ΄ λ νΈνκΈ΄ νμ§λ§, μμ νλ κ²μ μμ΄ μκ°μ΄ λ§μ΄ λ¨μΆλμλ€κ³ λκΌλ€.
μ₯μμ¬: MVVMꡬ쑰μ CollectionView 곡λΆκ° λ§μ΄ λ νλ‘μ νΈμμ΅λλ€!!
μμλΉ: λΉ λ₯Έ μμΌ λ΄μ μμ±νμ¬ λ³΄λ€ λ§μ λμ ꡬνμ μ§νν΄λ³΄κ³ μ νμ§λ§, κ·Έλ¬μ§ λͺ»ν κ² κ°μ μμ½λ€. κ·Έλλ CollectionView, CoreData, MVVM ꡬ쑰 μ΅μν΄μ§κΈ°μ μ±κ³΅ν κ² κ°λ€.