issues
search
kiwi1023
/
iOS-Mongsil
๋ชฝ์ค - ๋๋ฃจ๋ญ์ ํ ํ๋ฃจ์ ๊ฐ์ ๊ธฐ๋ก, ํ๋ฃจํ์ฅ ๋ช ์ธ iOS.ver
4
stars
2
forks
source link
readme
๐ Mongsil
ํ๋ก์ ํธ ๊ธฐ๊ฐ
<2022-12-29 ~ 2023-01-30>
๐ ๋ชฉ์ฐจ
์๊ฐ
์คํ ํ๋ฉด
๊ณ ๋ฏผํ ์
ํธ๋ฌ๋ธ ์ํ
์ฐธ๊ณ ๋งํฌ
๐ฑ ์๊ฐ
๐ป ๊ฐ๋ฐํ๊ฒฝ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
[
]() [
]() [
]()
๐ง ํ์
Kiwi
๊ทธ๋ฃจํธ
๐ฑ ์คํ ํ๋ฉด
๋น๋ฐ๋ฒํธ ์ ๋ ฅ
๋ฌ๋ ฅ
๋ฆฌ์คํธ
์ผ๊ธฐ ์ถ๊ฐ
์ผ๊ธฐ ์์ /์ญ์
์ผ๊ธฐ ๋ฉ๋ดํ๋ฉด
๊ด์ฌ
์ค์
๐ ๊ณ ๋ฏผํ ์
**
Clean Architecture๋ฅผ ์ ์ฌ์ฉํ๋๊ฐ์ ๋ํ ์๋ฌธ์ด ์๊ฒผ์ต๋๋ค.**
- Testableํ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด MVVM์ ์์๋ณด๋ ์ค Clean Architecture๋ฅผ ํจ๊ป ์ฐ๋ ๊ด๋ จ ๊ธ์ด ๋ง์ด ์์์ต๋๋ค. - MVVM๊ณผ Clean Architecture๊ฐ ์ด๋ค ์ด์ ๋ก ํจ๊ป ์ฌ์ฉ๋๋์ง์ ๋ํ ์๋ฌธ์ด ์๊ฒจ ํ์๋ฅผ ์งํํ์ต๋๋ค. - Clean Architecture๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ MVVM์ Model ๋ถ๋ถ์ ์ธ๋ถํํด์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์์ต๋๋ค. - ๊ฐ ํน์ฑ์ ๋ง๋ ์ญํ ๋ง์ ์ํํ๋๋ก ๋ถ๋ฆฌํด์ฃผ๋ฉด ๋ชจ๋ธ๋ถ๋ถ์ ์ฝ๋๋ค์ด ๋ณํ์ ํ์ฅ์ ์ด๋ ค์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์์ ์ฉ์ดํ ์ ์์์ ์๊ฒ ๋์์ต๋๋ค. - ์ด๋ฐ ์ฅ์ ์ ํ์ตํ๊ธฐ ์ํด ๊ธฐ์กด CoreData์ ์๋กญ๊ฒ Firebase๋ฅผ ์ถ๊ฐํ์ฌ ๋ก์ปฌ๊ณผ ๋ฆฌ๋ชจํธ DB๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง์ ์งํํ์ต๋๋ค.
**
REST_API์ Get์ ํตํด ๋ค์์ ์ ์ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํด์ค์ผ ํ๋ ๋ถ๋ถ์์ ์ ์ฌ์ฌ์ฉ ์ ๊ธฐ์กด Reqeust๋ฅผ ์ทจ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ์ต๋๋ค.**
- CompletionHandler ๋ฐฉ์์ ์ฌ์ฉํ ๋ Task๋ฅผ cancelํ๋ ๋ฉ์๋๊ฐ ์์์ง๋ง, Combine์ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์์ cancel์ ํธ์ถํ ์ ์์์ต๋๋ค. - Combine ํ์ต์ ํตํด AnyCancellable์ ์ทจ์ํ๋ ๊ฒ์ผ๋ก ๊ตฌ๋ ์ด ์ข ๋ฃ๋๊ณ ๊ตฌ๋ ์ ์ํ ์์ฒญ์ด ์ทจ์๋จ์ ์ ์ ์์์ต๋๋ค. - Cell์ prepareForReuse()์์ image๋ฅผ ์์ฒญํ๋ AnyCancellable์ ๋ชจ๋ ์ ๊ฑฐํด์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก reqeust ์ทจ์๋ฅผ ๊ตฌํํ์ต๋๋ค.
**
Controller์ View ๊ฐ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์งํํ ๋์ Combine์ฌ์ฉ์ ๋ํ ๊ณ ๋ฏผ์ด ์์์ต๋๋ค.**
- Controller ๋ด๋ถ์์ ์ฌ์ฉ์์ Action์ ์ ๋ ฅ ๋ฐ๋ ๋ฑ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ฒ๋ฆฌ ํ๋ ๊ฒ์ Combine์ ์ด์ฉํ๋ ๊ฒ์ ๋ฌด๋ฆฌ๊ฐ ์์์ต๋๋ค. - ๊ทธ๋ฌ๋ Controller ํ์ View์์๋ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ๋ฅผ ์ด๋ ํ ๋ฐฉ๋ฒ์ผ๋ก ํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ด ์๊ฒผ์ต๋๋ค. - RxSwift๊ฐ์ ๊ฒฝ์ฐ RxCocoa์์ ํธํ์ ํตํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉํ๋ ์คํผ๋ ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Combine์ ๊ฒฝ์ฐ SwiftUI์ ์ฌ์ฉ์ ์ ์ ํ๋ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ UIkit์์๋ ํด๋น ๊ธฐ๋ฅ์ ํ๋ ์คํผ๋ ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒ ๊ฐ์์ต๋๋ค. - ๊ฒฐ๊ตญ Delegate ๋ฐ ํด๋ก์ ๋ฅผ ํตํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ์๊ณ , ์์ผ๋ก UIkit์์ ํด๋น ๊ธฐ๋ฅ์ Combine์ ํตํด ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ํ์ต์์ ์ ๋๋ค.
โ ํธ๋ฌ๋ธ ์ํ
**
์ด๊ธฐ์ ์ค์ ํ useCase์ read ํจ์ ๋ฐํํ์ ์ด [Diary] ํ์ ์ด์์ผ๋, ์ถํ์ Remote DB ์ฌ์ฉ ์ ๋น๋๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ๋ฌ ํ์ ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.**
- ์๋ - Combine์ ์ฌ์ฉํด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ Combine์ ์ด๋ค ํ์ ์ผ๋ก ๊ฐ์ ์ ๋ฌํ ์ง ํ์๋ฅผ ์งํํ์ต๋๋ค. - ํด๊ฒฐ - Repository์์ ๊ฐ์ ๋ณด๋ผ ๋ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ Error ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ Future ํ์ ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. - ์ค์ ๋ก ๊ฐ์ ๋ฆฌํดํ๋ ํ์์ ์ธ๋ถ์์ ๊ฐ์ ์ ๋ฌํ์ง ๋ชปํ๊ณ , ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์์ ๋ก์ง๋ณ๊ฒฝ ์์ด ์ ๋ฌ๋ฐ์ ์ ์๋ AnyPublisher ํ์ ์ผ๋ก ๋ณํํด์ ์ฌ์ฉํ์ต๋๋ค.
**
textView์ ๋์ด๋ฅผ ๋ด์ฉ์ ๋ง๊ฒ ๋ณ๊ฒฝํ ๋ constraint์ ์ถฉ๋๋ฌธ์ ๊ฐ ์์์ต๋๋ค.**
- ์๋ - textView์ ๋์ด๋ฅผ ์ผ์ ํ ๋์ด๊น์ง๋ง ๋๋ฆฌ๊ณ ๊ทธ ํ์ ์คํฌ๋กค์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ๋ ค ํ์ต๋๋ค. - ์ต๊ณ ๋์ด ๋๋ฌ ํ ๊ณ ์ ํ๊ธฐ ์ํด constraint๋ฅผ ์ค์ ํ์ต๋๋ค. ๊ทธ ํ ๋ค์ ์ค์ด๊ณ ๋์ด๋ ๊ณผ์ ๋ฐ๋ณต ์ ์๋ก์ด constraint์ ๊ธฐ์กด constraint์ ์ถฉ๋๋ก ์ธํด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. - ํด๊ฒฐ - ์ต๊ณ ๋์ด ๋๋ฌ ์ ๋ง์ง๋ง constraints์ ํ์ธ, firstAttribute๊ฐ height์ผ ์ ๊ธฐ์กด constraint์ ์ง์ฐ๊ณ ์๋กญ๊ฒ ์ค์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค. ![](https://i.imgur.com/x76PMTg.png)
**
๋น๋ฐ ๋ฒํธ๊ฐ ์ค์ ๋์ด ์์ ๋ foreGround ์ง์ ์ ์ด์ ๋ทฐ์ ์๊ด์์ด ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ์ฐฝ์ ๋์์ผ ํ๋ ๋ฌธ์ **
- ์๋ - ์ฑ์ด Foreground ์ํ ์ง์ ์ SceneDelegate(sceneWillEnterForeground)์์ NotificationCenter๋ฅผ ์ด์ฉํด ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ์ฐฝ์ ๋์์ผ ํ๋ค๊ณ ์๊ฐํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ๋ชจ๋ ViewController์์ ํด๋น NotificationCenter๋ฅผ observeํ๊ณ ์์ดํ๋๋ฐ ๋ง์ฝ viewcontroller์ ๊ฐฏ์๊ฐ ์๋ฐฑ๊ฐ๋ผ๋ฉด ๋ชจ๋ viewcontroller์์ observe ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๊ณ ๋ฏผ์ด ์๊ฒผ์ต๋๋ค. - ํด๊ฒฐ - ์ฐ๋ ค์๋ ๋ฌ๋ฆฌ ์ต์์ viewController์์๋ง notificationCenter๋ฅผ ๊ตฌ๋ ํ๋ฉด ํ์ ํ๋ก์ฐ์ ๋ชจ๋ ๋ทฐ๋ค์ ํด๋น noti๋ฅผ ๊ตฌ๋ ํ๊ฒ ๋์ด ํ๋ฒ๋ง ๊ตฌ๋ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. ![](https://i.imgur.com/unGX1YA.png) (์บ๋ฆฐ๋ ๋ทฐ ์ดํ ํ๋ก์ฐ ๋ทฐ๋ ์๋์ผ๋ก ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ฐฝ์ ๋์ฐ๊ฒ ๋จ, ์์ ํ๋ก์ฐ ๋ทฐ๋ ์๋์)
๐ ์ฐธ๊ณ ๋งํฌ
https://github.com/kudoleh/iOS-Clean-Architecture-MVVM
https://developer.apple.com/documentation/combine
https://zeddios.tistory.com/925
๐ ๋งจ ์๋ก ์ด๋ํ๊ธฐ