iOS10-JipJung
iOS10-JipJung copied to clipboard
π§ μ§μ€μ λμμ΄ λλ μ¬μ΄λ 컨ν μΈ λ₯Ό μ 곡νλ μλΉμ€
πΒ νλ‘μ νΈ μκ°
π§ JipJungμ μ§μ€μ λμμ΄ λλ μ¬μ΄λ μ½ν μΈ λ₯Ό μ 곡νλ μλΉμ€μ λλ€.
ν¬κ² 2κ°μ§ μ½ν μΈ λͺ¨λκ° μμΌλ©° μ¬μ΄λμ ν¨κ» μκ°μ μΈ μ λλ©μ΄μ μ μ¦κΈΈ μ μμ΅λλ€.
κΈ°λ³Έμ μΈ λμμΈκ³Ό κΈ°λ₯μΒ TideΒ μ±μ μ°Έκ³ νμμ΅λλ€.
πΒ μ§μ€κ³Ό ν΄μμ λ°λκ° μλλλ€.
μΌμ λͺ°λνλ κ²λ μ§μ€, μ€λ‘―μ΄ ν΄μλ§μ μ¦κΈ°λ κ²λ μ§μ€μ λλ€.
π§Β ν΄μμλ μ’ λ₯κ° μμ§ μμκΉμ?
νΈμν μλ¦¬λ‘ κΈ΄μ₯μ νΈλ κ²λ ν΄μμ΄μ§λ§, μ λλ μμ μΌλ‘ μ€νΈλ μ€λ₯Ό ν΄μνλ κ²λ ν΄μμΌ κ±°μμ!
π§Β μ§μ λ Ήμν μμλ€μ λ€μΌλ©° νμ₯κ°μ λ껴보μΈμ!
κ° μμλ³ μ£Όμ μ μ½μ νΈμ λ§μΆμ΄ κ³ νμ§ λ§μ΄ν¬λ‘ μ€μ λ Ήμν μμμ μ 곡ν©λλ€.
βοΈΒ κ°λμ μλ‘μ ν λ§λ, μμμ ν λ§λκ° νμνμ§ μμΌμ κ°μ?
ν루 ν μ€, λΉμ μ λ§μμ νΈμνκ² ν΄ μ€ κΈμ μκ°ν΄λ릴κ²μ.
π§βπ€βπ§Β νμ μκ°
| ο£Ώ iOS | ο£Ώ iOS | ο£Ώ iOS | ο£Ώ iOS |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
S031 μ€νμπ§ |
S034 μ€μμ§πΏ |
S039 μ΄μνπ’ |
S055 μ‘°κΈ°μπ |
π‘Β μ£Όμ κΈ°λ₯
| ννλ©΄ μλ¨ | ννλ©΄ νλ¨ | μ€λμ λͺ μΈ | μ§μ€ ν΅κ³ νλ©΄ |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| κΈ°λ³Έ νμ΄λ¨Έ | λ½λͺ¨λλ‘ νμ΄λ¨Έ | 무ν νμ΄λ¨Έ | μ¨μ¬κΈ° νμ΄λ¨Έ |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| νκ·Έ μ ν κΈ°λ₯ | κ²μ κΈ°λ₯ | μμ μ¬μ | Bright λͺ¨λ | Dark λͺ¨λ |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
πΒ νλ‘μ νΈ κ΅¬μ‘°
MVVM κΈ°λ° Clean Architecture
iOS ν΄λ¦° μν€ν μ³ κ΅¬μ‘°λ₯Ό κΈ°λ³Έμ μΌλ‘ μ±μ©νμκ³ νλ μ ν μ΄μ κ³μΈ΅μ MVVM ν¨ν΄μ μ μ©νμμ΅λλ€.
ν΄λ¦°μν€ν
μ³μ λ μ΄μ΄ λ¨μλ‘ λλ ν 리 ꡬ쑰λ₯Ό λλμμ΅λλ€.

π Β μ¬μ©ν νλ μμν¬
πΒ Apple First-party Library
AVKit
- μμκ³Ό λμμμ λ°λ³΅ μ¬μμ μν΄ μ¬μ©νμ΅λλ€.
CoreAnimation
- μ§μ€λͺ¨λ κΈ°λ₯μμ μ¬μ©ν μ λλ©μ΄μ μ μν΄ μ¬μ©νμ΅λλ€.
- Pulse, νμ±, λΉμ ν λν, Text μ λλ©μ΄μ μ ꡬννμ΅λλ€.
- μ λλ©μ΄μ λͺ©μ μΈμλ UI κ°μ μ μν΄ μ¬μ©νμ΅λλ€
SpriteKit
- ν΄λ½ λΆμκΈ°λ₯Ό μ°μΆνκΈ° μν΄ λΉμ λ€λ£¨κΈ°μ μ ν©ν SpriteKitμ μ±ννμμ΅λλ€.
- SKLightNode, SKSpriteNode, SKActionμ μ΄μ©νμ¬ ν΄λΉ μ λλ§€μ΄μ μ ꡬννμμ΅λλ€.
π§Β Third-party Library
Firebase/Storage
- μμ λ€μ΄λ‘λ κΈ°λ₯μ ꡬννκΈ° μν΄ μ¬μ©νμμ΅λλ€.
- λ°±μλ μλ²μ λ§μ ν¬μλ₯Ό νμ§ μκ³ μ½κ² ꡬνν μ μλ€λ μ μ΄ λ§€λ ₯μ μ΄μμ΅λλ€.
RxSwift
- ViewModelκ³Ό Viewμ Data Bindμ λΉλκΈ° λ‘μ§μ λ΄λΉνκΈ° μν΄ μΆκ°νμμ΅λλ€.
- Callbackμ΄λ NotificationCenterλ±μΌλ‘λ κ΄λ¦¬ν μ μμ§λ§, Callbackμ Callback Hellκ³Ό κ°λ μ± λ¬Έμ κ° μκ³ NotificationCenterλ μ΄λμ λ³κ²½λ μ§ λͺ¨λ₯΄κ³ μ¬μ©νλ μΈ‘μμλ Keyμ νμ μ μ§μ κ΄λ¦¬ν΄μΌνλ λ±μ λ¬Έμ κ° μμ΅λλ€.
- Appleμ FirstPartyμΈ Combineμ μΆμλμ§ μΌλ§λμ§ μμ μ΅μνκ² λ¬Έμ κ° μκ³ μ°Έκ³ ν μμ κ° λ λ§μ RxSwiftλ₯Ό μ±ννμμ΅λλ€.
RealmSwift
- μ νΈλͺ©λ‘, νμ΄λ¨Έ μ΄μ©κΈ°λ‘ λ±μ μ 보λ€μ μ μ₯νκΈ° μν΄μ μ¬μ©νμμ΅λλ€.
- Appleμ FirstParty FrameworkμΈ CoreDataμ λΉν΄ μλκ° λΉ λ₯΄κ³ , μ½λλλ μ€μ΄ κ°λ° μμ°μ±μ λ μ’λ€κ³ νλ¨νμ¬ λμ νκ² λμμ΅λλ€.
SnapKit
- μ½λλ‘λ§ λ·°λ₯Ό μμ±νκΈ° λλ¬Έμ μ€ν λ μ΄μμ μ€μ μ μ’ λ κ°νΈνκ² νκΈ°μν΄ λμ νμ΅λλ€.
SwiftLint
- νμ μ μ½λ©μ€νμΌμ λν κΈ°λ³Έμ μΈ λ£°μ μ νκ³ μ§ν€κΈ° μν΄μ μ¬μ©νμμ΅λλ€.
- μ½λ 리뷰 λ 체ν¬ν΄μΌν 컨벀μ μ€λ₯μ λν νμΈμ μ»΄ν¨ν°μκ² μμν μ μμμ΅λλ€.
κΈ°μ νΉμ₯μ
UserInteraction
π€ μ¬μ©μ κ²½ν ν₯μμ μν μ λλ©μ΄μ
- μμ°μ€λ½κ² μ±μ λΉ μ Έλ€ μ μλλ‘ λΆλλ¬μ΄ νλ©΄μ νμ μ κ²½ μΌμ΅λλ€.
- νμ΄λ¨Έ κ°κ°μ νΉμ§μ 보μ¬μ€ μ μλ μ λλ©μ΄μ μ μ 곡ν΄μ μ¬μ©μκ° μ§κ΄μ μΌλ‘ μ΄λ€ νμ΄λ¨ΈμΈμ§ μ μ μλλ‘ λ§λ€μμ΅λλ€.
- SpriteKitμ μ΄μ©νμ¬ λ€ν¬λͺ¨λμ ν΄λ½ μ‘°λͺ μ λλ©μ΄μ μ ꡬννμμ΅λλ€.
π μ¬μ¬μ©μ±μ μν μ λλ©μ΄μ κΈ°λ₯
- UIViewAnimate, CAAnimation λ±μ μ μ νκ² μ¬μ©ν΄μ 컀μ€ν μ λλ©μ΄μ μ ꡬννμμ΅λλ€.
- 컀μ€ν μ λλ©μ΄μ μ νμν κ³³μμ μ¬μ©ν μ μλλ‘ μμ‘΄μ±μ λΆλ¦¬νμ¬ μ μνμμ΅λλ€.
β»οΈ λμμμ΄ ν¬ν¨λ 무ν μ€ν¬λ‘€μ μν 컀μ€ν λ·°
- λμμμ΄ μ΄μ΄μ§λ λλμ μ£ΌκΈ° μν΄ μ§μ ꡬνν 컀μ€ν λ·°λ₯Ό μ¬μ©νμμ΅λλ€.
- μ’μ° μ€ν¬λ‘€νλ©΄ λ€μ νλ©΄μ λΉλμ€/μ€λμ€λ₯Ό λΆλλ½κ² μλ μ¬μν©λλ€.
UI based Code (w/o storyboard)
π§βπ» Storyboardλ₯Ό μ¬μ©νμ§ μμ μ΄μ
- κ°μκ° λ€λ₯Έ κΈ°λ₯μ λ§‘μμ μμ
μ μ²λ¦¬νλ
λΆμμ΄ μλ μ¬λ¬ μ¬λμ΄ κ³΅ν΅μ λ¬Έμ λ₯Ό ν΄κ²°νλνμμ νλ€λ³΄λ©΄ μ€ν 리보λλ‘ μμ νμ λ μμ μΆ©λμ΄ λ§μ΄ μκΈΈ κ±°λΌ μμΈ‘νμκ³ μ½λλ‘ μμ νκΈ° μν΄ λ Έλ ₯νμ΅λλ€. - μ½λλ‘ μμ μ νλ€λ³΄λ gitμ ν΅ν΄ μλ‘μ μ½λλ₯Ό μ½κ² 리뷰ν΄μ€ μ μμκ³ ν΅μΌμ± μλ μ½λλ₯Ό μμ±ν μ μμμ΅λλ€.
π§βπ» μ½λλ₯Ό μ€μ΄κΈ° μν΄ νλ λ Έλ ₯λ€
-
μ¬μ¬μ©μ±μ λμ΄κΈ° μν΄ κ³΅ν΅ UI μ»΄ν¬λνΈ(Button, CardView λ±)μ λ§λ€μμ΅λλ€.
-
Autolayoutμ μ½κ² μμ±νκ³ μ½λλ₯Ό μ€μ΄κΈ° μν΄ μ΄λ―Έ λ§μ΄ μ¬μ©λκ³ μλ Snapkit λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμμ΅λλ€.
-
Extensionκ³Ό Genericμ μ μ ν νμ©ν΄μ λ°λ³΅λλ μ½λλ₯Ό μ€μ΄κΈ° μν΄ λ Έλ ₯νμ΅λλ€.
// EX) extension UICollectionViewCell { static var identifier: String { return String(describing: self) } } extension UICollectionView { func dequeueReusableCell<T: UICollectionViewCell>(indexPath: IndexPath) -> T? { return self.dequeueReusableCell(withReuseIdentifier: T.identifier, for: indexPath) as? T } }
π¨βπ» ν κ°λ° λ¬Έν
ν κ°λ°λ¬Έν, κΈ°μ μ μΈ μ΄μλ€μ ν μν€μμ νμΈν μ μμ΅λλ€.
















