register(_:forCellWithReuseIdentifier:) ๋ฉ”์„œ๋“œ์—์„œ PosterCell.self๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์…€ ์žฌ์‚ฌ์šฉ ๊ฐœ๋…UICollectionView๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์…€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•˜๊ณ , ํ™”๋ฉด ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ„ ์…€์€์žฌ์‚ฌ์šฉ ํ(reuse queue)์— ๋„ฃ์–ด์„œ ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šคํฌ๋กคํ•  ๋•Œ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์…€์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.  ์…€ ๋“ฑ๋ก ๊ณผ์ •1. ์…€ ํด๋ž˜์Šค ๋“ฑ๋กcollectionView.register(PosterCell.self, forCellWithReuseIdentifier: PosterCell.id) UICollectionView์— ์–ด๋–ค ํƒ€์ž…์˜ ์…€์„ ์‚ฌ์šฉํ• ์ง€ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ, register(_:forCellWithReuseIdentifier:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.  2. ์žฌ์‚ฌ์šฉ ์‹๋ณ„์žlet cell = collectionView...

๐ŸŽ iOS/Swift 2024. 8. 4. 13:05

[MVVM] Model์—์„œ Class๋Œ€์‹  Struct๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Swift์—์„œ ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค๋Š” ๋‘˜ ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.  ๊ตฌ์กฐ์ฒด (Struct)๊ฐ’ ํƒ€์ž…(Value Type): ๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํƒ€์ž…์ด๋‹ค. ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ๋•Œ, ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.๋ถˆ๋ณ€์„ฑ(Immutability): ๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.์ƒ์† ๋ถˆ๊ฐ€: ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์† ๊ณ„์ธต์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ์ ํ•ฉํ•˜๋‹ค.์ดˆ๊ธฐํ™”: ๊ตฌ์กฐ์ฒด๋Š” ์ž๋™์œผ๋กœ ๋ฉค๋ฒ„์™€์ด์ฆˆ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ œ๊ณต.  ํด๋ž˜์Šค (Class)์ฐธ์กฐ ํƒ€์ž…(Reference Type): ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋‹ค. ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ๋•Œ, ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์—..

๐Ÿฅ Sparta_iOS_4๊ธฐ/8๏ธโƒฃ 240809_ํฌ์ผ“๋ชฌ ๋„๊ฐ API 2024. 8. 4. 11:14

[URLSession] completion(nil) ๋Œ€์‹  Result ํƒ€์ž… ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Result ํƒ€์ž…์€ ์„ฑ๊ณต๊ณผ ์‹คํŒจ ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.Result ํƒ€์ž…์€ ์—ด๊ฑฐํ˜•์œผ๋กœ, ์„ฑ๊ณต ์‹œ์—๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹คํŒจ ์‹œ์—๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. enum Result where Failure : Error { case success(Success) case failure(Failure)}Success(์—ฐ๊ด€๊ฐ’): ์ž‘์—…์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์˜ ํƒ€์ž….Failure(์—ฐ๊ด€๊ฐ’): ์ž‘์—…์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ์˜ค๋ฅ˜์˜ ํƒ€์ž…. Failure๋Š” ๋ฐ˜๋“œ์‹œ Error ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค.   ๊ทธ๋ ‡๋‹ค๋ฉด Result ํƒ€์ž…์€ ์™œ ์“ฐ๋Š”๊ฑด๋ฐ?๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: Result ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ , ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ๊ฐ„๊ฒฐํ•ด..

๐ŸŽ iOS/Network 2024. 8. 2. 09:22

[ Architecture ] MVVM ํŒจํ„ด

1. ๋ทฐ์ปจ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ชจ๋ธ์„ ๋ทฐ๋ชจ๋ธ์ด ์†Œ์œ ํ•œ๋‹ค. (Output์ด๋‚˜ ๊ณ„์‚ฐ ์†์„ฑ, ํ•จ์ˆ˜ ๋“ฑ์œผ๋กœ)๊ฒฐ๊ตญ, ๋ทฐ์ปจ์€ ๋ทฐ๋ชจ๋ธ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ๋ทฐ์ปจ์— ํ‘œ์‹œํ•ด์•ผํ•œ๋‹ค. ๋ทฐ์ปจ์€ ๋ทฐ๋ชจ๋ธ์„ ์†Œ์œ ํ•œ๋‹ค. ๋ทฐ์— ๋„์›Œ์•ผํ•  ์ •๋ณด๋ฅผ ๋ทฐ์ปจ์ด ๋ทฐ๋ชจ๋ธ์„ ๊ฑฐ์ณ ํ‘œ์‹œํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ.  2. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ทฐ์— ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ๋ทฐ์ปจ์€ ๋ทฐ๋ชจ๋ธ์—๊ฒŒ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋•Œ ๋ทฐ์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๋•Œ์˜ ๋™์ž‘์„ ํ•˜๋ฉด ๋œ๋‹ค. ๋ทฐ๋ชจ๋ธ์€ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฐ ์•ก์…˜์„ ๊ฐ€์ง€๊ณ  ๋ชจ๋ธ(๋ฐ์ดํ„ฐ)๋ฅผ ๋ณ€ํ™” ์‹œํ‚จ๋‹ค.   3. ๋ทฐ๋ชจ๋ธ์—์„œ ํด๋กœ์ € ๋“ฑ์„ ์‚ฌ์šฉํ•ด ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๊ผˆ๋‹ค๊ณ  ์•Œ๋ ค์ค€๋‹ค. ๋ทฐ๋ชจ๋ธ์€ ๋ชจ๋ธ(๋ฐ์ดํ„ฐ)์™€ ๋กœ์ง์„ ๊ฐ–๋Š”๋‹ค. ๋ชจ๋ธ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ๋ทฐ๋ชจ๋ธ์—์„œ ๋ทฐ๋กœ ์ „๋‹ฌ.   ๋ทฐ๋ชจ๋ธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋ทฐ์— ์ „๋‹ฌํ•  ์ˆ˜  ์žˆ๋‹ค. ..

๐ŸŽ iOS/Patterns & Arch 2024. 8. 2. 08:06