โจ ์ ๊ฐ ์๊ฐํ๊ธฐ์ ํ์ํ๊ฑฐ๋ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ๋ง ์ ๋ฆฌํด๋์์ต๋๋ค. ์ด๋ก ์์ ์์์ ๋ง์ง ์์ ์ ์์ผ๋ ์ฐธ๊ณ ํ์๋ฉด์ ๋ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :) โจ
- App Delegate
- Scene Delegate
- View Controller
- UIViewController Lifecycle
- Constraints
- Design Pattern
- Segue
- Animation
- App์ด ํด์ผํ ์ผ(background / foreground ์ง์ , ์ธ๋ถ์์์ ์์ฒญ ๋ฑ) ์ ๋์ ๊ตฌํํจ
- ์ฑ์ ๊ฐ์ฅ ์ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ด๊ธฐํ
- ์ฑ์ scene ํ๊ฒฝ์ค์ (configuration)
- ์ฑ ๋ฐ์์ ๋ฐ์ํ ์๋ฆผ (๋ฐฐํฐ๋ฆฌ ๋ถ์กฑ, ๋ค์ด๋ก๋ ์๋ฃ)์ ๋์
- ํน์ ํ scenes, views, view controllers์ ํ์ ๋์ง ์๊ณ ์ฑ ์์ฒด๋ฅผ ํ๊ฒ์ผ๋ก ํ๋ ์ด๋ฒคํธ์ ๋์
- ์ ํ ํธ์ฌ ์๋ ์๋น์ค์ ๊ฐ์ด ์คํ ์ ์๊ตฌ๋๋ ๋ชจ๋ ์๋น์ค๋ฅผ ๋ฑ๋ก
-
UIApplicationMain: entry point์ ์ฑ์ ์ ๋ ฅ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ run loop ์์ฑ (์ด์ ๋ํ ์๋ต์ผ๋ก ์์คํ ์ ์์ฉํ๋ก๊ทธ๋จ ๊ฐ์ฒด(app์ lifecycle ๋ด๋น)๋ฅผ ์์ฑ -> ์์คํ ์์ ์ฑ์ ์คํ)
-
UIApplicationDelegate: ์ฑ์ ์ธํ ํ๊ณ , ์ฑ ์ํ ๋ณํ์ ์๋ตํ๋ฉฐ, ๋ค๋ฅธ app-level ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ์ํ ๋ฉ์๋์ set
- var window: UIWindow?: ์ฑ์ window์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅ. ์ฑ์ view ๊ณ์ธต๊ตฌ์กฐ์ ๋ฃจํธ๋ฅผ ๋ํ๋.
- window๋ optional property์ (UIWindow?์ด๊ธฐ์)
- var window: UIWindow?: ์ฑ์ window์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅ. ์ฑ์ view ๊ณ์ธต๊ตฌ์กฐ์ ๋ฃจํธ๋ฅผ ๋ํ๋.
-
UIResponder: ์ด๋ฒคํธ์ ๋ํ ์๋ต ๋ฑ๊ณผ ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ถ์ ์ธํฐํ์ด์ค.
-
์ด๋ฒคํธ์ ํ๋ฆ
-
์ด๋ฒคํธ(๋ฒํผ ํด๋ฆญ ๋ฑ)๋ฅผ UIEvent๋ก ๋ณํํด์ ์คํ ์ค์ธ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด์ธ UIApplication์ sendEvent ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
-
UIApplication์ sendEvent ๋ฉ์๋๋ UIWindow์๊ฒ sendEvent๋ฅผ ๋ค์ ๋ณด๋ธ๋ค.
-
UIWindow๋ ์ด๋ฒคํธ์ ํด๋นํ๋ ๋ฉ์์ง๋ฅผ ์์ ๋ทฐ ์ค์์ ์ต์ด ์๋ต ๊ฐ์ฒด์ ๋ณด๋ธ๋ค.
-
์ต์ด ์๋ต ๊ฐ์ฒด๊ฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ด๋ฒคํธ๋ ์๋ฉธ๋๋ค.
-
-
โ
- Scene Session์ด ์์ฑ๋๊ฑฐ๋ ์ญ์ ๋ ๋ AppDelegate์ ์๋ฆฌ๋ ๋ฉ์๋ ์ถ๊ฐ. (Scene session์ ์ฑ์์ ์์ฑํ ๋ชจ๋ scene์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌ)
// ์ดํ๋ฆฌ์ผ์ด์
์ด ์ต์ด ์คํ๋๋ ์ง์
application: UIApplication, didFinishLaunchingWithOptions
// ์ดํ๋ฆฌ์ผ์ด์
์์ ๊ฐ์ ธ์จ ์ด๊ธฐ configuration data(๊ตฌ์ฑ ๋ฐ์ดํฐ)๋ฅผ ๋ก๋ํด์ฃผ๋ ์ง์ (์๋ก์ด scene session์ด ์์ฑ๋์์ ๋ ํธ์ถ)
application: UIApplication, configurationForConnecting
// ์ดํ๋ฆฌ์ผ์ด์
์ด ์์ ํ ์ข
๋ฃ๋๊ธฐ ์ ์์ (user๊ฐ Scene์ ๋ซ์ ๋ ํธ์ถ)
application: UIApplication, didDiscardSceneSessions
: UI ์ํ๋ฅผ ์ ์ ์๋ UILifeCycle์ ๋ํ ์ญํ ์ ํจ.
-
Scene: UI์ ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ด๋ windows์ view controllers๊ฐ ๋ค์ด์์. ๊ฐ scene์ ํด๋นํ๋ UIWindowSceneDelegate ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์.
- appDelegate์์ scene session์ ํตํด scene์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ ๋ฐ์.
-
Scene Session: scene์ ๊ณ ์ ํ ๋ฐํ์ ์ธ์คํด์ค ๊ด๋ฆฌ.
-
UIWindowSceneDelegate: UIKit์ ์ฑ ๊ฐ์ ์ํธ์์ฉ์ ์กฐ์ ํ๋๋ฐ ์ฌ์ฉ
-
UIResponder: ์์ ๋ด์ฉ๊ณผ ๋์ผ
// scene์ ์ฐ๊ฒฐ์ด ํด์ ๋ ๋ ํธ์ถ
sceneDidDisconnect(_:)
// scene๊ณผ ์ํธ์์ฉ์ด ์์๋ ๋ ํธ์ถ
sceneDidBecomeActive(_:)
// ์ฌ์ฉ์๊ฐ scene๊ณผ ์ํธ์์ฉ์ ์ค์งํ ๋ ํธ์ถ ex) ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ ํํ ๋
sceneWillResignActive(_:)
// scene์ด ํฌ๊ทธ๋ผ์ด๋๋ก ์ง์
ํ ๋ ํธ์ถ
sceneDidEnteForeground(_:)
// scene์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ง์
ํ ๋ ํธ์ถ
sceneDidBackground(_:)
: ์ดํ๋ฆฌ์ผ์ด์ ์ ์ธํฐํ์ด์ค์ ์ธํฐํ์ด์ค์ ๋ฐ์ดํฐ ๊ฐ์ ์ํธ์์ฉ์ ๊ด๋ฆฌ
- UIViewController: view์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ์
- content view controllers: ์ดํ๋ฆฌ์ผ์ด์ ๋ด์ฉ์ ๊ด๋ฆฌ
- Container view controllers: ๋ค๋ฅธ view controller์ ์๋ ์ ๋ณด๋ฅผ ์์งํ ๋ค ํจ์จ์ ์ธ ๋ฐฉํฅ ์ ์
- init: View Controller๋ฅผ ์ด๊ธฐํํ๋ ๋ฉ์๋
- viewDidLoad: view๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ค ์คํํ๋ ๋ฉ์๋
- viewWillAppear: view๋ฅผ ์ฌ์ฉ์์ ์คํฌ๋ฆฐ์ ๋์ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ์๋ ex) scrollํ ๋ ๋ํ๋๋ ์ ๋ณด
- viewDidAppear: view๋ฅผ ์ฌ์ฉ์์ ์คํฌ๋ฆฐ์ ๋์ด ๋ค ์คํํ๋ ๋ฉ์๋ + ์ ๋๋ฉ์ด์ ์ ์์์ ์ ์
- viewWillDisappear: view๊ฐ ์ฌ์ฉ์์ ์คํฌ๋ฆฐ์ ๊บผ์ง๊ธฐ ์ง์ ์คํ๋๋ ๋ฉ์๋. Ex) ์์์ ํ ์คํธ๋ฅผ ๋ฐ๊พธ๋ฉด ์ง์ ์ ํ ์คํธ๋ฅผ ์ ์ฅํด์ฃผ๋ ์ญํ ?
- viewDidDisappear: ์คํฌ๋ฆฐ์ด ์์ ํ ๊บผ์ก์ ๋ ์คํ๋๋ ๋ฉ์๋
-
leading space: ์ ์ฒดํ๋ฉด๊ณผ component์ ์ผ์ชฝ ๋์ ๊ฑฐ๋ฆฌ๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ (์ผ์ชฝ ๋ง์ง๊ณผ ๋น์ท)
-
Trailing space: ์ ์ฒดํ๋ฉด๊ณผ component์ ์ค๋ฅธ์ชฝ ๋์ ๊ฑฐ๋ฆฌ๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ(์ค๋ฅธ์ชฝ ๋ง์ง๊ณผ ๋น์ท)
-
center vertically in container: y์ถ์ ๊ธฐ์ค์ผ๋ก component์ ์์น๋ฅผ ๊ฐ์ด๋ฐ๋ก ์ง์ ํด์ฃผ๋ ๊ฒ.
-
center horizontally in container: x์ถ์ ๊ธฐ์ค์ผ๋ก component์ ์์น๋ฅผ ๊ฐ์ด๋ฐ๋ก ์ง์ ํด์ฃผ๋ ๊ฒ
-
horizontal spacing: ๋๊ฐ์ component์ ์ฌ์ด์ spacing์ ์ง์ ํด์ฃผ๋ ๊ฒ
-
Equal width: component์ ๊ธธ์ด๋ฅผ ๋์ผํ๊ฒ ์ง์ ํด์ฃผ๋ ๊ฒ. (๋์ผํ ๊ธธ์ด๋ฅผ ์ง์ ํด์ฃผ์ด์ผ์ง ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ์ง ์์.)
-
Aspect ratio: width์ height์ ๋น์จ์ ์ง์ ํด์ฃผ๋ ๊ฒ
-
Top: ์ง๋ชฉ๋ component์ ์์ชฝ spacing์ ์ง๋ชฉํ component์ ๊ฐ๊ฒ ์ง์ .
-
Bottom: ์ง๋ชฉ๋ component์ ์๋์ชฝ spacing์ ์ง๋ชฉํ component์ ๊ฐ๊ฒ ์ง์ .
๋์์ธ ํจํด์ ์ฌ์ฉํ๋ ์ด์ : ๊ฐ๊ฐ์ ์ญํ ์ ๋๋ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ค๋ฉด, ์ ์ง๋ณด์์ ๊ฐ๋ฐ ํจ์จ์ด ์ข์์ง
- Model: ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI๋ถ๋ถ
- Controller: ์ฌ์ฉ์์ ์ก์ ์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
-
controller๊ฐ ์ฌ์ฉ์์ action์ ๋ฐ์
-
์ฌ์ฉ์์ action์ ํ์ธํ controller๋ model์ ์ ๋ฐ์ดํธ ์ํด
- View๊ฐ Model์ ์ด์ฉํ์ฌ ์ง์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ
- Model์์ View์๊ฒ Notifyํ์ฌ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ
- View๊ฐ Polling์ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก Model์ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ฌ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ
-
controller๋ Model์ ๋ํ๋ด์ค View๋ฅผ ์ ํ
-
View๋ Model์ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋
- controller๋ ์ฌ๋ฌ๊ฐ์ view๋ฅผ ์ ํํ ์ ์์
- controller๋ view๋ฅผ ์ ํํ ๋ฟ์ด์ง ์ง์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์์ (view๋ controller๋ฅผ ์์ง ๋ชปํ๋ ํํ)
- ๋จ์ํ ๊ตฌ์กฐ -> ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋์์ธ ํจํด
-
view์ model ์ฌ์ด์ ์์กด์ฑ์ด ๋์.
- ๋์ ์์กด์ฑ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ท๋ชจ๊ฐ ์ฆ๊ฐํ๋ฉด ๋ณต์กํ๊ณ , ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ธ ์ ์์.
-
model๋ง ํ ์คํธ ๊ฐ๋ฅ
- Model: ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI๋ถ๋ถ
- Presenterr: View์์ ์์ฒญํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก model์ ๊ฐ๊ณตํ์ฌ view์ ์ ๋ฌํด์ฃผ๋ ๋ถ๋ถ
- View๊ฐ ์ฌ์ฉ์์ Action์ ๋ฐ์
- view๋ ๋ฐ์ดํฐ๋ฅผ presentor์ ์์ฒญ
- presenter๋ model์๊ฒ ๋ฐ์ดํฐ ์์ฒญ
- model์ presentor์์ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ์ response.
- presenter๊ฐ view์๊ฒ ์๋ต๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ก
- view๋ presentor๊ฐ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ๊ตฌ์ฑํจ.
- Presenter๋ view์ model์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์, ๋์ ์ฐ๊ฒฐ์ํค๋ ์ ์ฐฉ์ ์ญํ ์ ์ํํจ
- presentor์ view๋ 1:1 ๊ด๊ณ์ด๋ค.
- view์ model ์ฌ์ด์ ์์กด์ฑ์ด ์กด์ฌํ์ง ์์.
- view์ model์ presentor๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ธฐ ๋๋ฌธ์.
- view์ presentor์ ์์กด์ฑ์ด ์กด์ฌํ์ฌ, ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋์ฌ์ด์ ์์กด์ฑ์ด ๊ฐํด์ง
- Model: ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ (๋ฐ์ดํฐ์ ํ)
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI๋ถ๋ถ
- View Model: View๋ฅผ ํํํ๊ธฐ ์ํด ๋ง๋ View๋ฅผ ์ํ Model. View๋ฅผ ๋ํ๋ด์ฃผ๊ธฐ ์ํ Model์ด์ View๋ค์ ๋ํ๋ด๊ธฐ ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๋ถ๋ถ. (๋ฐ์ดํฐ ์ ์ฅ ๋ถ๋ถ)
- View๋ฅผ ํตํด ์ฌ์ฉ์์ action์ด ๋ค์ด์ด
- view์ action์ด ๋ค์ด์ค๋ฉด, command ํจํด์ผ๋ก view model์ action์ ์ ๋ฌ
- view model์ model์๊ฒ ๋ฐ์ดํฐ ์์ฒญ
- model์ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ view model์ ์ ๋ฌ
- view model์ ์๋ต๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ์ ์ฅ
- View๋ view model๊ณผ data binding์ ํ๋ฉฐ ํ๋ฉด์ ๋ํ๋
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ: ํ๋ฉด์ ๋ณด์ด๋ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์น์ํค๋ ๊ธฐ๋ฒ
- command ํจํด: ์คํ๋ ๊ธฐ๋ฅ์ ์บก์ํํจ์ผ๋ก์จ ์ฃผ์ด์ง ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์คํํ ์ ์๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ํด๋์ค๋ฅผ ์ค๊ณํ๋ ํจํด
- command ํจํด๊ณผ data binding ๋๊ฐ์ง ํจํด์ ์ฌ์ฉํ์ฌ ๊ตฌํ
- command ํจํด๊ณผ data binding์ ์ด์ฉํ์ฌ view์ view model ์ฌ์ด์ ์์กด์ฑ์ ์์ฐ
- view model๊ณผ view๋ 1:n ๊ด๊ณ์
- view์ model ์ฌ์ด / view์ view model ์ฌ์ด์ ์์กด์ฑ์ด ์์.
- ๊ฐ ๋ถ๋ถ์ ๋ ๋ฆฝ์ฑ์ผ๋ก ์ธํด ๋ชจ๋ํํ์ฌ ๊ฐ๋ฐ ๊ฐ๋ฅ
- view model ์ค๊ณ๊ฐ ์ด๋ ค์
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI๋ถ๋ถ / user interaction์ ๋ฐ๋ ์ญํ
- interactor: presentor๋ก ๋ถํฐ ๋ฐ์ ๋ชจ๋ธ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ผ entity์ ์ ์ํ์ฌ entity๋ก๋ถํฐ ์์ ํ ๋ฐ์ดํฐ๋ฅผ Presenter๋ก ์ ๋ฌํ๋ ๋ถ๋ถ
- presenter: view์ interactor์ ์ค๊ฐ๋ค๋ฆฌ ์ญํ . view์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง
- entity: ๋คํธ์ํฌ, DB๋ฑ์ ๋ฐ์ดํฐ ๋ชจ๋ธ
- Router: VIPER ์ปดํฌ๋ํธ๋ค์ dependency injection์ ๋ด๋น. (์์กด์ฑ์ ๋ฎ์ถค) / ํ๋ฉด๊ฐ์ ํ์์ ์ํ ๋ผ์ฐํ ๋ด๋น(์ด๋ป๊ฒ ํ๋ฉด ์ ํ์ด ๋ ๊ฒ์ธ์ง๋ฅผ ๊ด๋ฆฌํจ.)
- view์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด presenter๊ฐ ํด๋น action์ ์ ๋ฌ
- presenter๋ก ๋ฐ์ ๋ชจ๋ธ์ ๋ฐ๋ผ์ interactor์ entity์ ์ ์ํ์ฌ entity๋ก ๋ถํฐ ์์ ํ ๋ฐ์ดํฐ๋ฅผ presenter๋ก ์ ๋ฌ.
- presentor๋ interactor๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ , view์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋.
-
ํ ์คํธ๊ฐ ์ฉ์ดํ๋ค.
-
์๋ฐฉํฅ ๋ก์ง ์ํ
- MVP / MVVM / MVC ์ ๊ตฌ์กฐ ์ฌ์ด์์ ์ ์ผ ๋ถ๋ฐฐ๊ฐ ์ ๋์ด์๋ ๊ตฌ์กฐ์.
- ์ฝ๋์์ด ๊ฐ์ฅ ๋ง๋ค.
- ์์ ๊ธฐ๋ฅ์๋ ๋ง์ ํด๋์ค๋ฅผ ์์ฑํด์ผํจ
- ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค
-
view: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI๋ถ๋ถ
-
Controller: view๋ฅผ ์ฝ๋์ ๋ฐ์ธ๋ฉํ๋ ๋ ์ด์ด
-
Interactor: controller์ ์์ฒญ์ ๋ณด๋ด์ผํ๋ ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต
-
presenter: interactor๋ก๋ถํฐ ๋ฐ์ ํํ๋ฅผ view์ ๋ง๊ฒ ์ ๋ฌํ ์ ์๊ฒ controller์๊ฒ ์ ๋ฌ
-
Router: controller์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฅธ user case์ ์ ๋ฌํ๋ ์ญํ
- view๊ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์ฑ
- controller์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ๋ชจ๋ธ์ ์์ฒญ ํ interactor ํธ์ถ
- interactor์์๋ ๊ธฐ๋ณธ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ธ์ค
- interactor์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ presenter์ ๋ณด๋
- Presenter์์ interactor์์ ๋ฐ์ ๊ฒฐ๊ณผ์ ๋ํ UI์ฒ๋ฆฌ๋ฅผ controller์ ์ ๋ฌํ์ฌ view์ ๋ณด์ฌ์ค.
- ๋จ๋ฐฉํฅ cycle๋ก ๊ตฌ์ฑ๋์ด์์. ( interactor -> presenter -> view controller -> interaction)
- presentor๋ interactor๊ณผ ์ง์ ์ ์ผ๋ก ์ํต ๋ถ๊ฐ
- ํด๋์ค ์์กด์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ตฌ์กฐ (๋ชจ๋ ์์กด์ฑ๋ณด๋ค ํด๋์ค ์์กด์ฑ์ ์ค์ ์ผ๋ก ๋๊ณ ๋ง๋ฆ. )
- ์ก์ ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ presenter๋ฅผ ํตํ์ง ์๊ณ ๋ฐ๋ก interactor์ ์์ฒญํด์ ๋ณํ๋ฅผ ์ฃผ๋ฉฐ ๋จ๋ฐฉํฅ์ผ๋ก ํ๋ก์ฐ ์งํ
- ํ์ฅ์ฑ์ด ์ข์
- ๋ชจ๋ layer๊ฐ ์ธํฐํ์ด์ค๋ก ์กด์ฌํ๊ธฐ์, ํ ์คํธ์ ์ฉ์ด
- layer๋ผ๋ฆฌ ์ ๋ฌํ ๋ request / response ๋ชจ๋ธ์ ๋ฉํํด์ผํ๋ ๋ถํธํจ์ด ์กด์ฌ
- ๋ชจ๋ธ์ ๋ฉํํ์ง ์์ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉ๋ ์ ์์
- ๋น๋๊ธฐ ์ก์ ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ณ๋๋ก ํ์ํจ
- Items: ์คํฌ๋ฆฐ์ ๋์คํ๋ ์ด ํ๊ณ ์ถ์ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ ex) ์ฌ์ง
- Groups: ์ฌ๋ฌ๊ฐ์ item์ ๊ฐ์ง๊ณ ์์. ์ด๋์ ๋ ์ด์์ ์์นํด์ผํ๋์ง๋ฅผ ๋ํ๋
- Sections: data๋ฅผ ๋ฌถ์ด๋์ ๊ฒ. datasource์์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๊ฐ ๊ตฌ์ฑ๋์ด์๋์ง๋ฅผ ์๋ ค์ฃผ๋ ์ญํ .
: ๋ฐ์ดํฐ์ collection view๊ฐ ์๊ตฌํ๋ view๋ฅผ ์ ๊ณต
- ์ผ๋ง๋ ๋ง์ section์ด collection view์ ๋ค์ด๊ฐ ๊ฒ์ธ์ง
- ์ฃผ์ด์ง section์์ ์ผ๋ง๋ ๋ง์ item์ด section์์ ์ฝ์ ๋ ๊ฒ์ธ์ง
- ์ฃผ์ด์ง section๊ณผ item์์, ์์ํ๋ ๋ด์ฉ์ด ๋ณด์ฌ์ง๊ธฐ ์ํด ์ด๋ ํ view๋ฅผ ์ฌ์ฉํด์ผํ๋์ง
- collection view ๋ด๋ถ์์ ์ ํํ๊ฑฐ๋ ์ค์ํ item์ ๊ด๋ฆฌ
- item์ ๋ํ ํ๋์ ์ํ
- item์ ์ฌ์ด์ฆ๋ฅผ ์ ์
- grid์ item ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์
: ์คํ ๋ฆฌ๋ณด๋์์ ๋ทฐ ์ปจํธ๋กค๋ฌ ์ฌ์ด์ ํ๋ฉด์ ํ์ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด
- ์ธ๊ทธ์จ์ด ์๋ณ์๋ฅผ ๊ฐ์ ธ์จ ๊ฐ์ ๊ฐ์ง๊ณ ํด๋น ๋ทฐ๊ฐ ๋ง๋์ง(identifier๊ฐ ๊ฐ์์ง) ๋น๊ต
- ๋ง์ผ๋ฉด ๋ชฉ์ ์ง ๋ทฐ๋ก ์บ์คํ
.
- ์ด๋, ๋ชฉ์ ์ง ๋ทฐ๋ฅผ ์ค์ ํ ๋ค, ๋ชฉ์ ์ง ๋ทฐ์ ์ ๋ฌ๋ฐ์์ผ ํ๋ ๋ณ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ด๋ํ ๊ฐ์ ํ ๋น.
// ๊ธฐ๋ณธ ํ์ด๋ฐ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ๋๋ฉ์ด์
๋ก๋
animate(withDuration: animations:)
// ์๋ฃ ํธ๋ค๋ฌ ์ถ๊ฐ
animate(withDuration: animations: completion: )
//๋๋ ์ด ๋ฐ ๋ค๋ฅธ ์ ๋๋ฉ์ด์
์ต์
์ฌ์ฉ
animate(withDuration: delay: options: animations: completion: )
// ์ผ๋ฐ์ ์ธ ๊ณก์ ํ์ด๋ฐ ํจ์๊ฐ ์๋ ์คํ๋ง์ ์ํ ํ์ด๋ฐ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ดํ
ํ๋ ํจ์
animate(withDuration: delay: usingSpringWithDamping: initialSpringVelocity: options: animations: completion: )
// ํค ํ๋ ์ ์ ๋๋ฉ์ด์
ํ์
animateKeyframes(withDuration: delay: options: animations: completion:)
// ๋ทฐ ํธ๋์ง์
transition(with: duration: options: animations: completion: )
// ์ 3์ ๋ทฐ๋ฅผ ํธ๋ ์ง์
transition(_: on: options: animations: completion: )
: ๋ทฐ์ ํ๋ ์์ ๊ณ์ฐํ์ง ์๊ณ 2D ๊ทธ๋ํฝ์ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ
- Scale: ๋ทฐ์ ๋์ด์ ๋์ด๋ฅผ ๋ฐฐ๋ก ์ฆ๊ฐ์ํค๋ ์ญํ
- Rotate: ๋ทฐ๋ฅผ ํ์
- Translate: ๋ทฐ์ ์์น๋ฅผ ๋ณ๊ฒฝ
CGAffineTransform(translationX: view.bounds.width, y:0).scaledBy(x: 3, y:3).rotated(by: 180)
// view.bounds.width๋งํผ x์ถ์ผ๋ก ์ด๋ํ๊ณ , x์ y๋ฅผ 3๋ฐฐ๋ก ๋๋ฆฐ ํ 180๋ ํ์