๋ชฉํ: ๋๊ตฐ๊ฐ ํผ๋์์ ํ๋ก์ฐ๋ ์ปค๋งจํธ, ์ข์์ ํ์ ๋
Notificaiton Controller์์ ์๋ฆผ์ ๋จ๊ฒ ํ๋ ๊ฒ!
ํน์ ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ์
๋ก๋ ํด์ผํ๋ค.
A ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ์ ๋ B์ ํฌ์คํธ์ ํํธ ๋๋ฅด๋ฉด B์ notificaiton์ ํด์ ์๋ฆผ ๋ชฉ๋ก ๋ฆฌ์คํธ์ ์ถ๊ฐ ํด์ผํ๋ค.
B๋ ์ฑ์ ์ด๊ณ ์๋ฆผ์ฐฝ์ ์ดํด๋ดค์ ๋ A์ ์๋ฆผ์ด ์์ด์ผ ํ๋ค.
- ํน์ ์ฌ์ฉ์์๊ฒ ์๋ฆผ ํ์
์ ์
๋ก๋ ํด์ผํ๋ค.
๊ตฌํ ์์
์ถ๊ฐ์ ์ผ๋ก,, ์๋ฒ์ ์ฌ๋ฆด ๋ Timestamp์ seconds๋ก ์ ์ฅํ๋๋ฐ ๋ค์ ์ ๋ถ ์ด๋ก ๋ฐ๊ฟ์ ์๊ฐ์ ์
๋ฐ์ดํธ ํด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๊ฐ ์ฑ์ ๋๊ฐ์์ ๋๋ ์๋ฆผ์ fcmํธ์๋ฅผ ๊ตฌํํด๋ด์ผ๊ฒ ๋ค.
์๋ก ์๊ฒ ๋ ๊ฐ๋
๋จ์ํ ํธ์ถ๋งํ๋๊ฒ ์๋๋ผ ์ธ๋์ผ์ดํฐ ๋ทฐ๊ฐ ๋ํ๋๋ฉด ์คํ์ค์ธ ๋์์๋ ๋ค๋ฅธ ๋ทฐ๋ค์ ์ํธ์์ฉ์ ์ฐจ๋จํด์ผ ์ข๋ค.
๊ทธ๋์ ์ธ๋์ผ์ดํฐ ์์ ํ ๋ view.isUserInteractionEnalbled = false
-> ์ธ๋์ผ์ดํฐ ๋ ์ view.isUserInteractionEnabled = true ๋ก ๋์ฒํ๋ค.
separator๋ cell ๊ณผ cell์ฌ์ด์ ์ ์ ๋งํจ. separator inset ๋ leadingAnchor์ ๋ํ ์ฌ๋ฐฑ
- ํ๋กํ ๋ฐ๋ string์ ์ฃผ์๊ฐ ์๋ค.
Data(contentsOf:)๋ณด๋ค URLSession์ ๊ฐ์ async network api๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ํ๋ค.
URLSession.shared.dataTask(with: url) { (data, response, err)
...
}.resume()
๋ง์ฃผํ ์ค๋ฅ
modern concurrency + combine์ ์ฌ์ฉํ ๋ ์ฃผ์์ฌํญ..
ViewController์ state์ ๋ฐ๋ฅธ Input์ ViewModel์ transform(_:)-> Output์ผ๋ก ๋ก์ง ์ฒ๋ฆฌ ํ ๋ค์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ผ State๋ฅผ ์
๋ฐ์ดํธ ํ ์ ์๋๋ก ๊ฐฑ์ ํด ์ฃผ๋ ์ฝ๋์์ refresh๋ผ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉด vm์ input์ผ๋ก ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ก์ง์ ์ฒ๋ฆฌํ๋ค.
์ด๋ ๊ธฐ์กด ์ ์ฅ๋ posts ๋ฐฐ์ด์ ๋ด๊ฒจ์๋ ํฌ์คํธ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ญ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ fetchPosts๋ฅผ ํตํด ์๋ก ๊ฐฑ์ ๋ ํฌ์คํธ ์ ๋ณด๋ค์ ๋ฐ์์จ๋ค. ๊ทธ ํ .reloadData๋ก ๋ฐํํ๋ค.
์ผํ ๋ณด๋ฉด ์ ์์ ์ธ ์ฝ๋ ๊ฐ์ง๋ง... fetchPosts๋ฅผ ๋ณด๋ฉด
Task๋ฅผ ํตํด asyncํจ์์ธ apiClient.postCase.fetchPosts()๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ค์ด๋ฐ๋๋ค. fetchPosts() ํจ์๋ ์ข
๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ .reloadData state๋ก ๋ฐํ๋์ด ViewController์ State์์ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ ๋ก๋ํ๋ผ๊ณ ๊ณง๋ฐ๋ก ์ ๋ฌํ๋ค. ํ์ง๋ง async ํจ์๋ await๋ฅผ ํตํด ์ฌ๋ฌ๋ฒ ์คํ, ์ค์ง ์์
์ ํตํด ํฌ์คํธ๋ฅผ ๋ฐ์์ด์ผ๋ก ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํด ํ
์ด๋ธ ๋ทฐ.reloadData๋ฅผ ์คํํด๋ async apiClient.postCase.fetchPosts()๋ ์คํ์ด ์๋ฃ๋์ง ์๋๋ค. ์ด ์ ์ ์กฐ์ฌํด์ผ ํ๋ค.
๋ฐ์ธ๋ฉ ์ค์ฒฉ.
cell์์์ ๋ฐ์ธ๋ฉ์ ํ ๊ฒฝ์ฐ ๋ฐ์ธ๋ฉ์ด ์ค์ฒฉ๋๋ค. prepareforReuse๋ฅผ ํตํด
์ฌ์ฌ์ฉ ํ์ ์ ์ฅํ๋ค๊ฐ ํน์ cell์ด ํ๋ฉด์ ๋
ธ์ถ๋๋ค๋ฉด ๋ค์ ๊บผ๋ด ์ฐ๋๋ฐ ๊บผ๋ผ๋๋ง๋ค ๋ฐ์ธ๋ฉ ๋๋ค.
81e029b10819107)
๊ทธ๋ผ
NotificationCellViewModel์ transform(with:)๊ฐ ์ฌ์ฌ์ฉ์ผ๋ก ๊บผ๋ด์ง ๋๋ง๋ค ๋ฐ์ธ๋ฉ์ด ๋์ ๋์ ๋ฐ์ธ๋ ๋ ๋งํผ์ ๊ฐ์ value๋ฅผ emitํ๋ค.
๊ทธ๋์ cell์ ๊ฒฝ์ฐ prepareForReuse()์์ subscription๋ค์ ์ ๋ถ cancelํ ํ์ ๋ค์ ๋ฐ์ธ๋ฉ์ ํด์ฃผ์๋ค.
subscriptions์ holdingํ๋ค๊ณ ํด๋ dismiss๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์ค์ฒฉํด์ ์์ผ ์ ์์ด์ ์์์ ์ผ๋ก cancel๊ณผ ์ฌ ํ ๋น ๋ฑ์ ํตํด ๊ด๋ฆฌํ๋๊ฒ ์ค์ํ๋จ๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ต์ํ์ผ๋ก ๋ฐ์ธ๋ฉ ๋๋ ๊ฒฝ๋ก๋ฅผ ์ค์์์๋ ๊ทธ๋๋ ๋ ๋ฒ์ฉ ์คํ์ด ๋๋ค. ์ค๋ณต ํธ์ถํด์ฃผ๋ ๊ตฌ๊ฐ์ด ์์ด์ ๊ทธ๋ฐ๋ฐ ์ด์ ์ ์๋ cell์ ์์น์ ์ฌ์ฌ์ฉํ์์ ๋ฐ๋ก ๊บผ๋ด์ค๊ธฐ ๋๋ฌธ์ transform(with:)๊ฐ ๋ ๋ฒ ํธ์ถ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ ๋ง ์ต์ํ์ ํธ์ถ์ธ ๊ฒ ๊ฐ๋ค. ์ฌ๊ธฐ์ operator๋ฅผ ์ฌ์ฉํ ๋จ ํ๋ฒ๋ง ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. ๋์ค์ ๋ฌธ์ ๋ฐ์์ first()๋ฅผ ์ญ์ ํด์ผ๊ฒ ๋ค.
- TableView cell's UIImageView, UIButton object action event ์คํ ์๋๋ ์ด์
https://dev-with-precious-dreams.tistory.com/168
passthroughSubject๋ฅผ ํตํด delegate๋ฅผ ๋ง๋ค์๋๋ฐ ํ๋ฒ์ action event์์๋ ๋ถ๊ตฌํ๊ณ ๋๊ฐ์ฉ published๋๋ ์ด์ NotificationController.swift ๊ด๋ จ
๊ฒฐ๋ก ์ ์ผ๋ก ๋ ๋ฒ send -> sink๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค...
์ ๋ฒ์๋ ํ๋ฒ ์ปด๋ฐ์ธ์ผ๋ก delegate ์ธ ๋ ํธ์ถ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ์ต์ํ์ผ๋ก ์ค์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋ ๋ฒ์ฉ ํธ์ถ ๋๋ค. ๊ณ์ํด์ ๊ฑด๋๋ ค๋ด๋ ์๋์ ์ด์ฉ ์ ์์ด first() operator๋ฅผ ์ฌ์ฉํด์ ๋๊ฒผ๋๋ฐ ์ด๋ฒ์๋ ๋ ๊ฐ์ ์ํฉ์ด ๋ฐ์๋ฌ๋ค. ๊ณ ์น๊ธฐ ์ํด ์๊ฐํ์ ์ผ๋๋ฐ๋ ๊ณ์ ๋ ๊ฐ์ฉ ํธ์ถ๋ฌ๋ค.
์ํฉ // Date: 1.13
- cell์ object ํฐ์น -> addTarget ๋ฉ์๋ ํ๋ฒ ํธ์ถ. ์ฌ๊ธฐ์ send๋ก currentValueSubject์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌํ๋๋ฐ ๋ ๋ฒ ์ ๋ฌํ๊ฒ ๋๋ค.
์ผ๋จ cell์์ ๋ฒํผ๊ณผ ํ๋กํ ์ด๋ฏธ์ง ๋ทฐ, ํฌ์คํธ ์ด๋ฏธ์ง ๋ทฐ ์ธ ๊ฐ๊ฐ ์๊ณ ๊ทธ ์ค ๋ ๊ฐ์ ์ก์
๋ฉ์๋๋ค.
์ค์ํ ๊ฑด ๋ฒํผ, ํ๋กํ ์ด๋ฏธ์ง ํ ๋ฒ ํด๋ฆญํ๋ฉด ๋ถ๋ช
์ก์
๋ฉ์๋๋ ํ๋ฒ ๋์ํ๋ค. ๊ทธ๋ฐ๋ฐ subject์ sink๋ฅผ ๋ ๋ฒ ๋ฐ๋๋ค. ํ์ธํด๋ณธ ๊ฒฐ๊ณผ send๋ฅผ ๋ ๋ฒ ํ๋ค. ๋ฐ์ธ๋ฉ์ด ๋ ๋ฒ ๋ฌ๋ค๋ ๊ฒฝ์ฐ๋ค.
์ด๊ฑด delegate๋ฅผ ๋ฐ๋์ชฝ
cell์๋ vm์ ์ ์ํ๋ค. ์ถํ Advanced architecure๋ก VM์ ์๋ฅผ ์ ํํ ๋ด์ผ๊ฒ ๋ค.. ( Cell ๋ํ view์ธ๋ฐ viewModel์ ์ฌ์ฉํด๋ ๊ด์ฐฎ์์ง.. ๊ถ๊ธํ๋ค)
์์ธ์ ์ฐพ์ง ๋ชปํด iOS๊ฐ๋ฐ ๋จํก๋ฐฉ์ ๋์์ ์์ฒญํ๋๋ฐ ๋คํํ ํ๋ถ์ด ๋ตํด ์ฃผ์
จ๋ค.. "์ฌ์ฌ์ฉ ํ์์ ๊บผ๋์๋๋ subscriptions ์ด๊ธฐํ๋ฅผ ํ๋์ง??!!?"
๋ฌผ๋ก ํ์๋ค... ๊ทธ๋ผ์๋ ๋ ๋ฒ์ฉ ํธ์ถ๋ฌ๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ด์จ๋ ๋๋ฒ์ฉ sink๋ฅผ ํ ๊ฒ์ ๋ฐ์ธ๋ฉ์ ๋ ๋ฒ ํ๋ค๋ ์๋ฏธ๋ก ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค. cell<-> cellVM , ViewController<->vm ์ฝ๋ ์ฌ๊ธฐ์ ๊ธฐ์ subscriptions๋ฅผ ์ ์งํ๋๋ผ ๋ฐ์๋ค...
NotificationsController์๋ vm๊ณผ์ ๋ฐ์ธ๋ฉ, NotificationCell ๋ cellVM๊ณผ์ ๋ฐ์ธ๋ฉ, ๊ฒ๋ค๊ฐ cell๊ณผ notificationController์ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ ๋ฐ์ธ๋ฉ ์ฆ subscriptions๊ฐ ๋ ๊ฐ ์ ๋ ์์๋๋ฐ ์ด์ค์์ delegate๋ฐ์ธ๋ฉ์ ๊ดํ subscriptions๋ฅผ notificationController์ subscriptions ๋ณ์์์ ์ฐพ๊ธฐ ํ๋ค์๋ค. ์๋ํ๋ฉด Set์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ํฉ ์ค๋ช
์ ๊ธ๋ก ๋จ๊ธฐ๊ธฐ ์ ๋งคํ๋ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ด๊ฐ ์๋ชปํ ์ ์ ๋จํก๋ฐฉ์์ ๊ฐ๋ฐ์ ๋ถ์ด ํด์ค ๋ง์ด ๋ง๋ค. ์ฌ์ฌ์ฉํ์์ ๊บผ๋ด์ฌ ๋ cell์ cellVM์ ์ด๊ธฐํ๋ฅผ ํ์ง๋ง NotificationController์ subscriptions๋ ์ด๊ธฐํ๋ฅผ ํ์ง ์์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ฌ์ฌ์ฉ ํ์์ ๊บผ๋ผ ๋ ์ด๊ธฐํ๋ฅผ ์์ ํ ํ์ง ๋ชปํ ๊ฒ์ด ๋๋ค.(cell์ subscriptions๋ ์ด๊ธฐํ ํ์๋๋ฐ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ด๋ จ subscription์ NotificationCeneter์์ ํด์ฃผ์ง ๋ชปํ ๋ด ์๋ชป..ใ
)
์ฌ์ฌ์ฉํ -> setupNotificationCellDelegate(_:)๋ ๋งค๋ฒ sink๋ฅผ ํตํด ๋ฐ์ธ๋ฉ ๋๋๋ฐ ์ด๋ subscriptions๋ฅผ ์ด๊ธฐํ ํด์ฃผ์ง ์์ ๊ฒ์ด๋ค.
๋ฐ์ธ๋ฉ์ ์ด๊ณณ ์ ๊ณณ์์ ํ๋ค ๋ณด๋๊น prepare๋ฅผ ํตํด cell์ ์ง์์ subscriptions ์ด๊ธฐํ ํ์ง๋ง delegate๊ด๋ จ์ ํด์ฃผ์ง ๋ชปํ๋ ๊ฒ์ด๋ค. ใ
ใ
,, ๊ทผ๋ฐ ์ฌ์ง์ด cancellables๋ Set์ ์ ์ฅ์์ผ์ delegate๊ด๋ จ publihser์ cancellable๋ ์ฐพ๊ธฐ ํ๋ค์๋ค.
๊ทธ๋์ ๋์์ฑ
์ผ๋ก ํ๋กํผํฐ ํ๋ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ์ ๋ช
์ ๋ถ๋ช
ํ๊ฒ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฃ๋ค subsciriptions์ฌ์ ์ ๋ง ํ๊ฐ๋ฆฐ๋ค. ์ข์ ๊ฒฝํ์ ํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฌ์ฉํ์์ setupNotificationCellDelegateํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค delegateSubscription์ ์๋ก์ด send๋ก๋ถํฐ holdingํ๋ ๊ฒ์ผ๋ก ๋ฐ๊ฟ์ ์๋ก delegate๊ฐ ํธ์ถ๋๋ฉด ๋ค์ delegateSubscription์ด ์๋ก์ด ๊ฑฐ๋ก ๋ฎ์ด์ง๋๋ก ํจ์ผ๋ก ์๋ฌ๋ฅผ ๊ณ ์ณค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ํ๋ฉด ๋ํ๋ ๋, reloadTableView๋ก ํ
์ด๋ธ ๋ทฐ ๋ฐ์ดํฐ๋ค ๋ค์ ๊ฐฑ์ ๋ ๋๋ ํด์ฃผ์๋ค ๊ฑฐ์ ๋ชจ๋ ์ํฉ์ ๋๋น๋ฅผ ํ๋ค๊ณ ํ ์ ์๋ค!! ํ..
๊ณ ๋ฏผ๊ฑฐ๋ฆฌ..
์ด๊ธฐํ ๊ด๋ จ..
ํด๋ก๋ capture ์ฑ๊ฒฉ์ด๋ค. ํนํ lazy var ๋ฅผ ๋จ์ฉํ ๊ฒฝ์ฐ ์ข์ง ์์ง๋ง viewController์์ ์์ view๊ฐ load๋๊ธฐ ์ด์ ์ addTarget์ ํตํด ๋ฉ์๋๋ฅผ ๋ฑ๋กํ ๊ฒฝ์ฐ ํด๋น ๋ฉ์๋๊ฐ ์ ์ฉ์ด ์๋์ lazy var ํค์๋ค๋ฅด ์ฌ์ฉํ๋ค.
๋ฐ๋ฉด ํจ์๋ ํธ์ถ ๋์ด์ผ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ข
๋ฃ์์ ์ด ๋ถ๋ช
ํ๋ค(async๋ฅผ ์ฐ์ง์๋ํ)
์ข ๋ ์ฐ๊ตฌํด๋ด์ผํ๋ค.
swift ๊ณต์๋ฌธ์์๋ ํด๋ก์ ๋ก ๋ณ์ ์ด๊ธฐํ๊ฐ ์๋ค. ๋ค ์ ์ธ ํ init๋ฉ์๋ ์์์ ์ด๊ธฐํ๋ฅผ ํ๋ค. ํ์ง๋ง ์ ๋ช
ํ ์ฑ
์์๋ ํด๋ก์ ๋ฅผ ํตํด ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ค.
์๋์ ๊ฒฝ์ฐ ํด๋์ค์ ์๋จ๋ถ์ ๋ณ์ ์ ์ธ + ์ด๊ธฐํ, init๋ฉ์๋ ์ ์ด๊ธฐํ. ํด๋์ค ์๋จ๋ถ์ ์ ์ธํ์๋ง์ ๋ฐ๋ก ํจ์๋ฅผ ์ฌ์ฉํด์ ์ด๊ธฐํ๋ฅผ ํจ์ผ๋ก ํด๋์ค ์๋จ๋ถ๋ฅผ ๊ฐ๋ตํ๊ฒ ํด์ ๋ณ์๋ค์ ๋ณด๊ธฐ ์ฝ๊ฒ ํ๋ ค๊ณ ํ๋ค.๊ทธ๋ฐ๋ฐ ํจ์๋ฅผ ํตํด init() ๋ฉ์๋๊ฐ ์์์ด ์๋, ์ด๊ธฐํ๊ฐ ๋์ง ์์ ๋ณ์๋ฅผ ์ด๊ธฐํ ํ๊ธฐ ์ํด์๋ ์กฐ๊ฑด์ด ์๋ค.
์ ์ญ ํจ์์ธ๊ฐ? or ํด๋น ํด๋์ค ๋ด๋ถ์ ํจ์์ธ๊ฐ? ์ด๋ ํด๋น ํด๋์ค ๋ด๋ถ์ ํจ์์ธ ๊ฒฝ์ฐ init()๋ฉ์๋๋ฅผ ํตํด ํด๋์ค๊ฐ ์ด๊ธฐํ ๋๊ธฐ ์ด์ ์ด๋ผ๋ฉด ํด๋์ค ๋ด ๊ตฌํํ๋ ํจ์๋ค์ ์ฌ์ฉํ์ง ๋ชปํ๋ค.(ํด๋์ค๊ฐ ์ด๊ธฐํ ๋์ง ์์๊ธฐ ๋๋ฌธ,.,.)
์?
A ํด๋์ค ๋ด๋ถ์ ๋ณ์๋ค์ ์ด๊ธฐํ ํ๊ธฐ ์ํด A ํด๋์ค ๋ด๋ถ์ ํน์ ํ๋กํผํฐ์ ๋ํ ์ด๊ธฐํ ํจ์๋ฅผ ๊ตฌํํ์ง๋ง ์ด ์ด๊ธฐํ ์ ์ฉ ํจ์๋ค์ A ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น ๋์ด์ผ๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ๋ static ํค์๋๋ฅผ ํตํด์ ํจ์๋ฅผ ์ ์ธํ๋ค. Static์ ์ฌ์ฉํ๋ค๋ฉด A ํ๋กํผํฐ์ ์ด๊ธฐํ๊ฐ ์์ด๋ ์ฌ์ฉํ ์์๊ธฐ ๋๋ฌธ์ด๋ค. Staticํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด object's ๋ฉ๋ชจ๋ฆฌ์ ๊ณง๋ฐ๋ก ํ ๋น๋๊ณ A ์ธ์คํด์ค ์์ด๋ ๋ฐ๋ก ์ด์ฉํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
Static ํค์๋๋ ๋คํธ์ํฌ ํ์ฑ์ ํ์ํ ํจ์ ๋ฑ์ ํด๋์ค ์์ ๊ตฌ์กฐํ ํด์ ์ ์ธํ ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ๋ฐ๋ก ์ฌ์ฉํ ์์๋๋ก Static ํค์๋๋ฅผ ์ ์ธํด์ ์ฌ์ฉํ๋ค. (Like singleton pattren) ? ์ฐ์์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ๊ทธ๋ง ํผ ๊ฐ์ ํ๋กํผํฐ, ํจ์๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์์ด๋๋ฐ static์ ์ฌ์ฉํ๋ฉด ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ static์ผ๋ก ์ง์ ๋ ํจ์๋ค๋ง ๋ฉ๋ชจ๋ฆฌ์ allocate๋๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ์ ์ค์ผ ์์์ง ์์๊น..์๊ฐํ๋ค.
๊ทธ๋๋ฌธ์ ์ด๋ ๊ฒ ์ฌ์ฉํ๋ค. ) ์ ๊ทธ๋ฆผ์์ ๋ณ์๋ค์ ์ด๊ธฐํํ๊ธฐ ์ํด ์ ์ธ๋ initProfileImageView()... ๋ฑ์ ํจ์๋ค ๋ํ static์ผ๋ก ๊ตฌํ๋ฌ๋ค. ์ด ์ด๋ฏธ์ง ๋ทฐ, username, fullname label๋ฑ์ ๊ฐ๋ UIView๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ธํ๋ค๊ณ ๊ฐ์ ํ ๋ static ํค์๋๋ก ํจ์๋ฅผ ๋ง๋ค๋ฉด (์ด์ฐจํผ ์ด๊ธฐํ ๋ ํ๋ฒ ์ฐ์ด๋ ํจ์๋ค,,) ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํจ์๊น์ง allocate๋์ง ์๊ณ ๋จ ํ๋ฒ ํ ๋น๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํด๋ก์ ๋ฅผ ํตํด ๋ณ์๋ฅผ ์ด๊ธฐํ ํ ๋๋ ์ ์ธํ { } ํํ์ ํด๋ก์ ๋ฅผ "( )"๋ฅผ ํตํด ํด๋ก์ ์คํ ์์ผ์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ init()๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ด์ return์ ํตํด ํน์ ํ์
์ object๋ฅผ ์ ํ๋ ํด๋ก์ ์ ()๋ init๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ์ ์์ ์ ์คํ๋๋ ๊ฒ์ด๋ค. ๊ทผ๋ฐ ํด๋ก์ ๋ ์ผ๊ธ ๊ฐ์ฒด ํจ์์ด๋ค. ์ด๋ค ๊ฐ์ฒด์๋ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋ค. return์ ํตํด ๋ฐํ๋ ๊ฐ์ ํ์
์ถ๋ก ์ ํตํด ๋ณ์๋ฅผ ์ด๊ธฐํ ํ๋ค.
ํด๋ก์ ๋ ํน์ ๋ฒ์ ๋ด ๋ณ์๋ฅผ ๋ฐ์ธ๋ฉํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๊ณ capture์ ํน์ง์ด ์๋ค. ํ์ง๋ง ์บก์ณ๋ ์ธ๋ถ์ ๋ณ์์ ๊ฐ์ ์ฌ์ฉํ ๋๋ง ์บก์ณ๋ฅผ ํ๋ค. ARC ๋ reference type์ผ ๋ ์๋ํ๋๋ฐ ์ค์ํ ๊ฒ์ ํด๋ก์ ๋ reference type์ด๋ค.
์ผ๊ธ ๊ฐ์ฒด๋ฅผ ์ง์ํ๋ Swift ์คํ์ผ์ด ํด๋์ค ๋ด ๋ณ์ ์ด๊ธฐํ ์์ ์๋ ์ ํธํ ๊น? ์ด๊ธฐํ ๊ณต์๋ฌธ์์๋ ํด๋ก์ ๋ฅผ ํตํด ์ด๊ธฐํ๋ฅผ ํ๋ ๊ตฌ๋ฌธ์ด ์๋ค.. .... ๋ด ์คํ์ผ์ ๋ณ์๋ค์ ํ์ธํ๊ณ ๊ด๋ จ ๋ก์ง์ ๊ตฌํํ๊ธฐ ์ํด ๋ณ์๋ค์ ํ ๋์ ๋ณด๊ธฐ ์ฝ๊ฒ ํด์ผํ๋ค. ๊ทธ๋ ๊ธฐ์ ํด๋ก์ ๋ฅผ ํตํ ์ด๊ธฐํ๋ฅผ ํ ๋ ํด๋ก์ ์ ๋ด๋ถ์ ํน์ ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํ ํ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ค์ด ๊ธธ๊ฒ ๋์ด์ง ์ ์๋จ์ ์ด๊ณ ํ๋กํผํฐ๋ฅผ ์๊ธฐ ์๋์ ์ผ๋ก ์ด๋ ค์ธ ์ ์๋ค. ์ด ๋ถ๋ถ๋ง ๋ฐ๋ก ๋บ๋ค๋ฉด ๋ค์ฅ ๋ ์ฅํด์ง ๊ฒ์ด๋ค. ๊ทธ๋ผ์๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ํ๋ ํด๋ก์ ๋ ๋งค๋ ฅ์ ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๋ด๊ฐ ํ๋ static์ ์ฐ๋ ๋ฐฉ๋ฒ์ ์ข์ ๋ฐฉ๋ฒ์ผ๊น ์๊ฐ์ ํด๋ดค๋ค. ์ผ๋จ ๋ค๋ฅธ ํด๋์ค์๋ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ static ํด๋์ค๊ฐ ์๋ค๋ฉด? ๋ฌผ๋ก ํด๋น static ํจ์๊ฐ ์ด๋ฆ์ด ๊ฐ์๋ ํด๋์ค ์์ด๊ธฐ ๋๋ฌธ์ ์๋ณ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ํน์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์์๋ static func ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ธฐ ๋๋ฌธ์ ์ข์ง ์๋ค๊ณ ํ๋จํ๊ณ ํผ๋์ค๋ฌ์ ๋ค... ๋ฌผ๋ก static์ ์ฅ์ ์ ๊ทธ๋ผ์๋ ํ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ ๋ ์ด์ ํด๋น ํด๋์ค๋ฅผ 4๊ฐ ๋ง๋ ๋ค๊ณ ํ์๋๋ static type์ ์ค์ฒฉ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ง ์๋๋ค๋ ์ ์ด๋ค.
๊ทธ๋๋ ๊ณ์ํด์ ์ฐพ์๋ดค๋๋ฐ ์ข์ ๋ฐฉ์์ ์ฝ๊ฒ ์ฐพ์ ์ ์์๋ค,, ๊ณ์ํด์ ์ฐพ์๋ณด๋ค๊ฐ ํด๋ก์ ๋ฅผ ํตํ lazy var๋ thread unsafetyํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๊ทธ๋ผ์๋ UIButton์ ์ด๊ธฐํ ํ ๋ ํด๋ก์ ๋ฅผ ํตํ ์ด๊ธฐํ๋ฅผ ํ๊ฒ ๋๋ค๋ฉด, init()๋ฉ์๋ ์ด์ ์ ์ด๊ธฐํ๋ฅผ ํ๋ค๋ ๋ง์ด๋ค. ์์ง self ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. init() ํธ์ถ ์์ ์ ์ด๋๊น,, ๊ทธ๋ ๋ค๋ ๊ฒ์ func, @objc action method๋ ์ฌ์ฉ์ด ๋น์ฐํ ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋ผ ํด๋ก์ ๋ฅผ ํตํ ๋ณ์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๊ตฌ๋ฌธ์์ ํด๋ก์ ์์ ๋ฒํผ์ addTarget์ ํตํด ํด๋์ค ๋ด์ ์๋ ์ก์
๋ฉ์๋๋ฅผ ์ง์ ํ๋ฉด init()์์ ์ด ์๋๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํด๋์ค์ func, @objc func ๊ฐ ํ ๋น๋์ง ์์์์ผ๋ก ์ก์
๋ฉ์๋๊ฐ ๋ฑ๋ก๋์ง ์์ lazy๋ฅผ ์ ์ธํจ์ผ๋ก init()์ดํ์ @objc func๋ฅผ addTarget์ผ๋ก ๋ฑ๋กํ๋ฉด์ ์ด๊ธฐํ๋ฅผ ํ๋ค.
์ด๋ฐ lazy๋ฅผ ์ฐ๋ฉด ์ข์ง ์๋ค๋?! ๊ทธ๋์ ๊ณ์ํด์ ์ฐพ์๋ณด์๋ค. ใ
;
์คํ ๋ฆฌ๋ณด๋ ์ฌ์ฉํ ๋ UI object๋ฅผ ํด๋์ค์ ๋๋๊ทธํ๋ฉด ์์ธ๋ ๋ณ์๊ฐ ์ ์ธ๋๋๋ฐ ๊ฐ์ ์ต์
๋ ํ์
์ด๋ค. weak var๊ฐ ์๋ ์ด์,, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ธ์ ๋ดค๋๋ฐ UIViewController์์ ์ฌ์ฉ๋๋ UIํ๋กํผํฐ๋ค์ ๊ฑฐ์ ์ฌ์ฉ๋๋ค. ๊ทธ๋์ "!"๋ฅผ ์ฐ๋๋ฐ ์ด๋ init()์ดํ์ ์ด๊ธฐํ๊ฐ ๋จ์ผ๋ก lazy๋ฅผ ์ฐ์ง ์์๋ ์์๊ฐ์ lazy var ํด๋ก์ ๊ตฌ๋ฌธ or ํจ์๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค๊ณ ํ๋ค. ๊ทธ๋์ ์ผ๋จ ์ ๋ฐฉ์์ผ๋ก ์ ํํ๋ค.
๋ณ์๋ค์ ๋ฐ๋ก ํ์ธ ํ ์์์ด ์ข๋ค.
init๋ฉ์๋ ์์์ ํจ์๋ฅผ ํตํด ๊น๋ํ๊ฒ ์ด๊ธฐํ ํ ์ ์๋ฐ.
์ผ๋จ let, var, ํด๋ก์ , ARC, retain ๋ฑ ์ด๊ธฐํ์ ๊ดํ ๊ณต๋ถ๋ฅผ ๋ ํ ํ ์ ๋ฆฌ ํด์ผ๊ฒ ๋ค...
lazy var ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ ์ธ๋ ๋ณ์์ ๊ธฐ๋ฅ์ ์ง์ ํ๋ ํจ์๋ค. ๊ทผ๋ฐ followButton์ ๋๋ฌด ๊ณ์ ์จ์ ํด๋ก์ ๋ฅผ ํตํด ์บก์ณ๋๋ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ข์ง ์์๊น ์๊ฐํ๊ณ
UtilsUI ์์ setupLayout์ด๋ผ๋ ์ปค์คํ
ํจ์๋ฅผ ํตํด ํด๋ก์ ๋ฅผ ๊ตฌํํ๋ค. ์ฝ๊ฒ $0์ผ๋ก ์ด๊ธฐํ๋ฅผ ํ๋ค