๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€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.