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

Swift4

[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.
[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.
[Swift] Array ๋ฐฐ์—ด Array ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ ์ปฌ๋ ‰์…˜ ํƒ€์ž… ๋ฐฐ์—ด ์ƒ์„ฑ ๊ฐ’์„ ๋ฐ”๋กœ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. swift๋Š” ํƒ€์ž… ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์‹œ ํŠน์ • ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. // ํƒ€์ž… ์ง€์ •O let number: [Int] = [1,3,5,2,6,8] let name: [String] = ["ํ”ผ์นด์ธ„", "๋ผ์ด์ธ„", "ํŒŒ์ด๋ฆฌ", "๊ผฌ๋ถ€๊ธฐ"] // ํƒ€์ž… ์ง€์ •X let number = [1,3,5,2,6,8] let name = ["ํ”ผ์นด์ธ„", "๋ผ์ด์ธ„", "ํŒŒ์ด๋ฆฌ", "๊ผฌ๋ถ€๊ธฐ"] ํ•˜์ง€๋งŒ ํƒ€์ž…์„ ๊ผญ ๋ช…์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šด๋‹ˆ๋‹ค ๋นˆ ๋ฐฐ์—ด ์ƒ์„ฑ ์—ฌ๋Ÿฌ ํƒ€์ž… ๊ฐ’์˜ ๋ฐฐ์—ด ์ƒ์„ฑ // 1. ๋นˆ ๋ฐฐ์—ด ์ƒ์„ฑ ๋ฐฉ๋ฒ• (์•„๋ž˜ ์„ธ ๋ฐฐ์—ด์€ ๋ชจ๋‘ ๊ฐ™์€ ํ˜•ํƒœ์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.) var colo.. 2022. 6. 11.