์ ์ฒด ๊ธ20 [SwiftUI] MVI Architecture ์ ์ฉํด๋ณด๊ธฐ 1๏ธโฃ MVI ๋ฑ์ฅ ๋ฐฐ๊ฒฝ / ํ์์ฑ SwiftUI์์ MVVM..? 1. MVVM์์์ ViewModel์ ์ญํ View์ ์ด๋ฒคํธ์ ๊ทธ์ ๋ํ ์ก์ ์ ๋ฐ์ธ๋ฉ View(VC)์์ ์ด๋ค ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ, ์ด๋ฒคํธ์ ๋ํ ์ฒ๋ฆฌ + ๊ทธ ๊ฒฐ๊ณผ๋ก ์ํํ ์ก์ (UI ์ ๋ฐ์ดํธ ๋ฑ)์ View์ ์ ๋ฌ SwiftUI์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ Binding์ ํตํด ์ด๋ฒคํธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ค๋ฉด ๋น๊ต์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ณ , MVVM์์ ViewModel์ ์ญํ ์ด ํฌ๊ฒ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค. 2. MVVM์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ก์ฐ MVVM์ ์๋์ ๊ฐ์ด ์๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ก์ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง SwiftUI๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ก์ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์, ์๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ก์ฐ์ธ MVVM์ ์กฐ๊ธ ์ ํฉํ์ง ์์๋ณด์์ต๋๋ค. 2๏ธโฃ .. 2023. 3. 14. [Swift] MEMORY LEAK ์ก๊ธฐ ๋ฉ๋ชจ๋ฆฌ ๋์, ๋ฉ๋ชจ๋ฆฌ ๋ฆญ.. ์กฐ์ฌํด์ผ๋๋ค…. ์ฝํ ์ฐธ์กฐ ํด์ค์ผ๋๋ค … ์ ์ํด์ฃผ๋ฉด ์ฑ ํฐ์ง ์๋ ์๋ค… ๋ผ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฃ๊ธฐ๋ง ํ์ง, ์ง์ ๊ฒช์ด๋ณด๊ธด ์ฒ์์ด์์ต๋๋ค .. ์ต๊ทผ ์์์ ๋ค๋ฃจ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์์๋๋ฐ์ฌ ์๋น์ค ๋ด์์ ๋ผ์ด๋ธ ์์๋ ๋ค๋ฃจ๊ณ , ๋ค์๋ณด๊ธฐ ๊ฐ์ ๋ค์ํ ์์์ ์ฒ๋ฆฌํ๋ค๋ณด๋ ์์์ ๋๋ฆฌ๋ค๋ณด๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ก ์ธํด์ ์ฑ์ด ํฐ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ํนํ ๋ผ์ด๋ธ ๋ค์๋ณด๊ธฐ ์์๊ฐ์ ๊ฒฝ์ฐ, 3์๊ฐ์ง๋ฆฌ ์์์ ์ ๋ฌ๋ฐ๋ค๋ณด๋ ์์์ ํ๋ ์ดํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ํํ ์น์๊ณ ,, ์ต๋ 3๋ฒ๊น์ง ํ๋ ์ดํ๋ฉด ์ฑ์ด ํฐ์ง๋๋ผ๊ตฌ์.. ์ ํฌ๊ฐ ์ ๋ฌ๋ฐ์ ์ ์๋ ์์์ ์ข ๋ฅ๋ ํฌ๊ธฐ๋ ์ผ๋จ ๋น์ฅ ์ฒ๋ฆฌํ ์ ์๋ ์์ญ์ด ์๋๋ผ ์๊ฐ๋์ด ์ต๋ํ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ก์๋ณด์ ํ๋ ์๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. ๐ ๋ฉ๋ชจ๋ฆฌ .. 2023. 2. 17. [RxSwift] ์๋ฌ ํธ๋ค๋ง RxSwift + MVVM + Clean Architecture๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํธ๋ฅผ ์์๋ก ์์ฑํ์๋๋ค. 1. ์ํ๋ error ์ enumํ์ผ๋ก ์ ์ rx์์๋ onError๋ฅผ ์ฌ์ฉํด์ error๋ฅผ ์ ๋ฌํ๋๋ฐ, onError ์์๋ Error ํ์ ์ ๋ฐ๊ธฐ ๋๋ฌธ์ Error ํ๋กํ ์ฝ์ ์ฑํํ APIError๋ฅผ ์์ฑํด์คฌ์ต๋๋ค. // MARK: - APIError import Foundation enum APIError: Error, Equatable { case pathErr case serverErr case userInfoErr case decodingErr case duplicatedUserErr(userId: [Int]) var type: String { switch self { case .path.. 2023. 2. 9. [HIG] Web views๐ Human Interface Guidelines์ ๋ํ ํด์๊ณผ ์ฃผ๊ด์ ์ธ ์ฌ๋ก ๋ถ์์ ์ถ๊ฐํ ๊ธ์ ๋๋ค. ๐Web views Web view๋ HTML์ด๋ ์น์ฌ์ดํธ์ ๊ฐ์ ํ๋ถํ ์น ์ปจํ ์ธ ๋ฅผ ์ฑ ๋ด์์ ์ง์ ์ ์ผ๋ก ๋ถ๋ฌ์ ๋ณด์ฌ์ค๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์ผ์์๋ ๋ฉ์ธ์ง ๋ด์ HTML ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด web view๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๐Best practices Enable forward and back navigation when appropriate Web view์์๋ ์๋ค ํ์์ ์ ๊ณตํ์ง๋ง, ์ด ํ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ์น๋ทฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์๋ค ํ์์ด ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด๊ธฐํํ ์ ์๋ ์ปจํธ๋กค์ ์ ๊ณตํด์ผ ํฉ๋๋ค. Avoid using a web.. 2022. 11. 4. [iOS] ํธ์์๋ฆผ ๋ฐ์์ ์ฒ๋ฆฌํ๊ธฐ ํธ์์๋ฆผ์ ํตํด ์ฑ์ ๋ค์ด์ค๋ ๊ฒฝ์ฐ๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ์ ์์ด๋๋ค ์ฑ์ด ์์ ํ ์ข ๋ฃ๋ ์ํ inactive/active/background ์ํ 1๏ธโฃ ์ฑ์ด ์์ ํ ์ข ๋ฃ๋ ์ํ์์ ํธ์์๋ฆผ์ ํตํด ์ฑ์ ๋ค์ด์ค๋ ๊ฒฝ์ฐ SceneDelegate์ willConnectTo์์ ์ฒ๋ฆฌ class SceneDelegate: UIResponder, UIWindowSceneDelegate { ... func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { ... // ์ฑ ์ข ๋ฃ ์ํ์์ ํธ์์๋ฆผ์ ํตํด ์ฑ์ ์ ์ํ๋ ๊ฒฝ์ฐ if let notificatio.. 2022. 10. 12. [Swift] RxSwift์์ Combine์ผ๋ก ๋ฐ๊ฟ๋ณด๊ธฐ Combine์ด ๋ชฐ๊น .. ๋ชฐ๊น ..... ํ๋ค๊ฐ .. ๋จผ์ RxSwift + MVVM ์ผ๋ก ๊ตฌํํ ๋ค ๊ทธ๊ฑธ Combine์ผ๋ก ๋ฐ๊ฟ๋ณด์ ! ๋ผ๋ ์๊ฐ์ ํ์ต๋๋ค ๊ฐ๋ตํ๊ฒ ๋ง์ด๋ค ์ด๋ฐ ์กฐํฉ์ผ๋ก ์ฌ์ฉํ๋ MVVM๊ณผ RxSwift์ ๋ํด ๊ฐ๋จํ๊ฒ ๋ณด๋ฉด,, MVVM = Model + View + ViewModel MVVM + RxSwift ์์ ์กฐํฉ์์๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ์์ญ๊ณผ ๊ทธ์ ๋ํ ๋ฐ์์ Rx๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๊ฒ ๋๋ต๋๋ค ๋๊ฐ ํ๋ฆ์ ๋ณด๋ฉด.. ์๋์ ๊ฐ์ด ์งํ๋ ๊ฒ๋๋ค.. ๐โ๏ธ View์์ ์ด๋ฒคํธ ๋ฐ์ -> ViewModel์๊ฒ input ์ ๋ฌ -> ViewModel์์ ๊ทธ input์ ๋ํ ๋ฐ์์ผ๋ก ์ด๋ค ์์ ์ ์ํ -> ViewModel์ output์ผ๋ก ์ ์ฅ -> View์์ ๊ทธ output์.. 2022. 9. 26. [iOS] Compositional Layout ๐โ๏ธ UICollectionViewCompositionalLayout์ด๋? compositionalLayout์ collectionView layout์ ํ ์ข ๋ฅ์ ๋๋น ๊ฐ๊ฐ์ ์์ ๊ตฌ์ฑ๋ค์ด ๋ชจ์ฌ์ ์ ์ฒด ๋ ์ด์์์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ผ๋ก, ๊ธฐ์กด์ ์ปฌ๋ ์ ๋ทฐ ๋ ์ด์์ ๊ตฌํ์ ๋นํด ์ข ๋ ๋ค์ํ ๊ตฌ์ฑ์ ๋ ์ด์์์ ๊ตฌํํ ์ ์์ต๋๋ค. section + group + item ๋ณ๋ก ๋ฌถ์ด์ ๋ ์ด์์์ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ section ๋ณ๋ก ๋ค๋ฅธ ๋ ์ด์์์ ๊ตฌ์ฑํ๊ธฐ๊ฐ ์ฝ๋ค๋ ์ ์ด ์ฅ์ ์ ๋๋ค. ๊ฐ์ฅ ์์ ๋จ์์ item๋ถํฐ item์ ๋ฌถ์ด๋ group, ๊ทธ group์ ๋ฌถ๋ section ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. item, group์ ๊ฐ ์ฌ์ด์ฆ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ item์ group์ ์์๋ก, group์ section์ ์์๋ก ๋ฃ์ด์ค.. 2022. 9. 5. [Git] ๋ช ๋ น์ด ๋ชจ์๋๊ธฐ๐คข git ๋ช ๋ น์ด๋ฅผ ์๊พธ ๊น๋จน์ด์ ๊ทธ๋ฅ ์ฌ๋ ค๋๊ณ ๊ณ์ ๋ณด๋ ต๋๋ค ์๋ก์ด๊ฑธ ์๊ฒ๋ ๋๋ง๋ค ์ถ๊ฐ๋ ์ ์์ต๋๋ค ๐คทโ๏ธ ๋ณ๊ฒฝ๋ ํ์ผ stage๋ก ์ฌ๋ฆฌ๊ธฐ // ํด๋ ์์ ์๋ ๋ณ๊ฒฝ๋ ๋ชจ๋ ํ์ผ ์ฌ๋ฆฌ๊ธฐ git add . // ์ํ๋ ์ผ๋ถ ํ์ผ๋ง ์ฌ๋ฆฌ๊ธฐ git add stage๋ก ์ฌ๋ฆฐ ํ์ผ๋ค ๋ค unstage ์ํ๋ก ๋ด๋ฆฌ๊ธฐ git reset stage๋ก ์ฌ๋ฆฐ ํ์ผ commit ํ๊ธฐ git commit -m "์ปค๋ฐ๋ด์ฉ" push ์ , commit message ์์ ํ๊ธฐ ์ด์ commit ๊ณผ ํ์ฌ stage์ ์ฌ๋ผ์์๋ ํ์ผ๊น์ง ํฉ์ณ์ commit ์์ ์์ ํ esc + wq * unstaged ํ์ผ์ ํฌํจ๋์ง ์์ git commit --ammend push ์ , ์ง์ commit ์ทจ์ํ๊ธฐ git reset head^.. 2022. 8. 1. ์ด์ 1 2 3 ๋ค์