iOS

more

[ iOS ] ์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ…, ARC (Automatic Reference Counting)

์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ… Automatic Reference Counting Swift๋Š” ์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ…(ARC)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ARC์— ์˜ํ•ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค๋Š” ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ• ๋‹น ํ•ด์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ํด๋ž˜์Šค ๋“ฑ๊ณผ ๊ฐ™์ด ์ฐธ์กฐํƒ€์ž…์˜ ๊ฒฝ์šฐ ์ฐธ์กฐ ๊ด€๊ณ„์— ์˜ํ•ด ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋˜๋Š”๋ฐ, ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(memory leak)๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด, ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์—†๋Š” ์ง์ด ๋ฐฉ ํ•œ ์ผ ์— ๊ณ„์† ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ARC ์˜ ์ž‘๋™์›๋ฆฌ ํด๋ž˜์Šค์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ARC๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ์— ํ• ๋‹น..

iOS 2024.03.27 0

[ iOS ] ํ™”๋ฉด ์บก์ณํ•˜๊ธฐ - UIGraphicsRenderer

๐Ÿ”ซ ๋ฌธ์ œ ๋ฐœ์ƒ iOS 17๊ฐ€ ๋ฐœํ‘œ๋˜๋ฉฐ, ์•ฑ์Šคํ† ์–ด์— ๋ฐฐํฌํ•œ ์„œ๋น„์Šค์— ํ˜น์‹œ deprecated๋œ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์„๊นŒ ์‹ถ์–ด ์ฐพ์•„๋ดค๋‹ค. ์ •๋ง ์•ˆํƒ€๊น๊ฒŒ๋„ '์ด๋ฏธ์ง€ ๊ณต์œ ํ•˜๊ธฐ' ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ UIGraphicsBeginImageContextWithOptions(_:_:_:)๊ฐ€ iOS 17.0 ๋ฒ„์ „๊นŒ์ง€๋งŒ ์ œ๊ณต๋œ๋‹ค๊ณ  ํ•œ๋‹ค... ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋ฒ„์ „ ์—…์„ ํ• ๊นŒ ๊ฑฑ์ •ํ•˜๋ฉฐ ๊ณต์‹ ๋ฌธ์„œ์—์„œ Graphic, Image, Render๋ฅผ ํ‚ค์›Œ๋“œ๋กœ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํด๋ž˜์Šค ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„๋ดค๋‹ค. ๋‹คํ–‰ํžˆ ๋ฉ€์ง€ ์•Š๊ฒŒ Drawing ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ UIGraphicsRenderer ํด๋ž˜์Šค๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค! ์ด์ œ ์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ iOS 17 ์ดํ›„๋ฅผ ๋Œ€์‘ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์‹œ์ž‘ํ•ด๋ณด์ž. ๐ŸŽจ UIGraphicsRenderer UIGraphics..

iOS 2023.12.22 2

[ iOS ] ์—ด๊ฑฐํ˜•์˜ ์›์‹œ๊ฐ’์œผ๋กœ ํŠœํ”Œ ์‚ฌ์šฉํ•˜๊ธฐ

enum Direction: String { case up = "์ƒ" case down = "ํ•˜" case left = "์ขŒ" case right = "์šฐ" } let direction: Direction = .right print(direction.right) /// print "์šฐ" ์—ด๊ฑฐํ˜•์—๋Š” ์›์‹œ๊ฐ’(rawValue)์ด ์žˆ์–ด ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๊ฐ’์„ case๋ณ„๋กœ ๊ฐ’์„ ํ• ๋‹นํ•ด ํ•„์š”ํ•  ๋•Œ ๊บผ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ์œ ์˜ํ•  ์ ์€, ์ด ์›์‹œ๊ฐ’์€ Literal ํƒ€์ž…๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. Literal์€ ๊ณต์‹๋ฌธ์„œ์—์„œ "์ˆซ์ž๋‚˜ ๋ฌธ์ž์—ด ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ’ ํ‘œํ˜„"์ด๋ผ ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํƒ€์ž…์„ ๊ฐ–๊ณ  ์žˆ์ง€๋Š” ์•Š๋‹ค. ํ•˜์ง€๋งŒ literal์€ ์•„์ฃผ์•„์ฃผ ์ •ํ™•ํ•˜์—ฌ Swift์˜ ํƒ€์ž… ์ถ”๋ก  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ํƒ€์ž…์ด ์ถ”๋ก ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ..

iOS 2023.12.01 2

์‹œํ–‰์ฐฉ์˜ค

more

[ iOS ์‹œํ–‰์ฐฉ์˜ค ] URLSession์œผ๋กœ multipart/form-data ์š”์ฒญ

๐Ÿ‘ฉโ€๐Ÿ’ป๋ฐฐ๊ฒฝ๐Ÿ‘ฉโ€๐Ÿ’ป์•จ๋ฒ”์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ด ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ์ž‘์—…์ด ์ฃผ์–ด์กŒ๋‹ค. ์ด์ „์— ๋ช‡ ๋ฒˆ ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋ฐ›์•„๋ณธ ๊ฒฝํ—˜์ด ์žˆ์–ด ๋ฌด๋ฆฌ๊ฐ€ ์—†์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๊ทธ๋•Œ๋Š” 3rd party์ธ Alamofire๋ฅผ ์‚ฌ์šฉํ–ˆ์–ด์„œ ๊ฐ„๋‹จํ–ˆ์—ˆ๊ณ  ์ง€๊ธˆ์€ Apple์˜ built-in์ธ URLSession์„ ์‚ฌ์šฉํ•ด์•ผํ•ด์„œ ๋งŽ์ด ํ—ท๊ฐˆ๋ ธ๋‹ค. '์‹œํ–‰์ฐฉ์˜ค' ๊ธ€์—์„œ๋Š” ๋‚ด๊ฐ€ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€๋งŒ ์ •๋ฆฌํ•˜๊ณ  ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋”ฐ๋กœ ๊ธ€์„ ์ž‘์„ฑํ•  ์˜ˆ์ •์ด๋‹ค. ๐Ÿ˜ฎ cURL Vs HTTPAPI๋ฌธ์„œ๋Š” ํ‘œํ˜„์˜ ์ฐจ์ด ๋“ฑ์œผ๋กœ iOS๋งŒ ์•Œ๊ณ  ์žˆ์–ด์„œ๋Š” ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๊ทธ๋™์•ˆ ํ•ด์™”๋˜ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๊ฒฝํ—˜๊ณผ ๊ตฌ๊ธ€๋ง์„ ๋ฐ”ํƒ•์œผ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ์ž˜ ์ดํ•ดํ•˜๋ฉฐ ์—ฐ๊ฒฐํ•ด์™”๋‹ค. ์˜ค๋žœ๋งŒ์— ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ API๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ๋‚ด๊ฐ€ ๋”ฐ๋กœ ์ฐพ์•„ ๊ณต๋ถ€ํ–ˆ๋˜ mutipart..

[ iOS ์‹œํ–‰์ฐฉ์˜ค ] CollectionView์˜ Section ์ˆจ๊ธฐ๊ธฐ -CompositionalLayout

๐Ÿ‘ฉโ€๐Ÿ’ป๋ฐฐ๊ฒฝ๐Ÿ‘ฉโ€๐Ÿ’ป ์›๋ž˜ Section์ด ํ•œ ๊ฐœ์˜€๋˜ collection view๋ฅผ ๋‘ ๊ฐœ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์•„์ดํ…œ์ด ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ํ……- ๋นˆ ๊ณต๊ฐ„์ด ๋‚จ๊ฒŒ ๋˜์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„ ์•„์ดํ…œ์ด ์—†์„ ๊ฒฝ์šฐ Section์„ ์ˆจ๊ธฐ๊ณ ์ž ๊ณ„ํšํ–ˆ๋‹ค. How to deal with empty items section Section์„ ์ ‘๋Š” ๊ฑด ์ž์ฃผ ๋ณด์ด๋Š” ๊ธฐ๋Šฅ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์ง€ ์•Š์„๊นŒ ๊ณต์‹๋ฌธ์„œ์„ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ณด์•˜์ง€๋งŒ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ ๋˜ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์ž์ฃผ ๋ดค๋˜ Section ์ˆจ๊น€ ๊ธฐ๋Šฅ์€ ๋ณดํ†ต TableView๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ์ด๊ฑฐ๋‚˜ FlowLayout์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ด์—ˆ๋Š”๋ฐ, ๋‚˜๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ Section์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค ๊ณ„ํš์ด..

[ iOS ์‹œํ–‰์ฐฉ์˜ค ] CollectionView ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ (Performing reloadData as a fallback โ€” Invalid update)

๐Ÿ‘ฉโ€๐Ÿ’ป๋ฐฐ๊ฒฝ๐Ÿ‘ฉโ€๐Ÿ’ป CollectionView๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด cell ์‚ญ์ œ, ์ถ”๊ฐ€, ๋ณ€๊ฒฝ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋•Œ reloadData, reloadSection, deletedItem, insertItem ๋“ฑ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ด€๋ จํ•˜์—ฌ CollectionView์˜ ๋ ˆ์ด์•„์›ƒ์„ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์œ ํšจํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ [UICollectionView] Performing reloadData as a fallback โ€” Invalid update: invalid number of items in section 0. ... deleteItem ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด CollectionView๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค ํ•˜๋Š”๋ฐ ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  collectionView์— ์–ด๋– ํ•œ ๋ณ€ํ™”๋„ ์—†์—ˆ๋‹ค..

Swift

more

[ Swift ] Swift๋ž€?

Swift Swift is a general-purpose programming language that's approachable for newcomers and powerful for experts. It is fast, modern, safe, and a joy to write.์œ„ ๊ธ€์€ Swift.org์—์„œ ๊ฐ€์žฅ ๋จผ์ € ๋ณผ ์ˆ˜ ์žˆ๋Š” Swift ์†Œ๊ฐœ๊ธ€์ด๋‹ค. Swift๋Š” ์ ‘๊ทผ์„ฑ์ด ์ข‹๊ณ  ๊ฐ•๋ ฅํ•œ ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋ฉฐ, ๋น ๋ฅด๋ฉฐ ํ˜„๋Œ€์ ์ด๊ณ  ์•ˆ์ „ํ•˜์—ฌ ์ฆ๊ฒ๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. interactive programming languageSwift์—์„œ ๊ฐ•์กฐ๋˜๋Š” ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ƒํ˜ธ์ž‘์šฉ์ด๋‹ค. ์ปดํŒŒ์ผ ์–ธ์–ด์ž„์—๋„, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์ ํ™”๋˜์–ด์žˆ์–ด ๋งˆ์น˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ฒ˜๋Ÿผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ๋‹ค.์ปดํŒŒ์ผ..

Swift 2023.10.08 0

[ Swift ] zip(_:_:)

Documentation /Swift /Swift Standard Library /Collections /zip(_:_:) zip(_:_:) func zip( _ sequence1: Sequence1, _ sequence2: Sequence2 ) -> Zip2Sequence where Sequence1 : Sequence, Sequence2 : Sequence ๋‘ ๊ฐœ์˜ sequence๋กœ ๊ตฌ์„ฑํ•œ sequence ์Œ์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜์ด๋‹ค. Array, String, Range์ฒ˜๋Ÿผ Sequence ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•œ ํƒ€์ž…์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์˜จ๋‹ค. ์ฆ‰, ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง„๋‹ค ํŠœํ”Œ sequence ๋ฐ˜ํ™˜ zip์„ ์‚ฌ์šฉํ•ด ๋‘ sequence๋ฅผ ํ•ฉ์น˜๋ฉด ๊ฐ ์›์†Œ๋“ค์ด ๋™์ผํ•œ ์ธ๋ฑ์Šค ์›์†Œ๋“ค๊ณผ ์ง์„ ์ง€์–ด ํŠœํ”Œ ํƒ€์ž…์˜ Z..

Swift 2023.10.08 1

[ Swift ] isCase | isLowercase | isUppercase

isCase ํ•ด๋‹น Character์˜ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์ด๋‹ค. String์ด ์•„๋‹ˆ๋ผ Character์˜ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ผ๋Š” ์ ์„ ์ฃผ์˜ํ•˜์ž. ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ์˜์–ด๋Š” ture์ด์ง€๋งŒ ํ•œ๊ธ€, ์•„์ด์ฝ˜, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์€ false์ด๋‹ค. let english = "a" let korean = "๊ฐ€" let icon = "๐Ÿงš๐Ÿปโ€โ™€๏ธ" let half = "ยฝ" if english.first!.isCased { print(english) } // Prints "a" if korean.first!.isCased { print(korean) } if icon.first!.isCased { print(icon) } if half.first!.isCased { print(half) } isLowe..

Swift 2023.10.04 0

์งง์€

more

[ ์งง์€ ] 5 - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•˜๋‚˜ ์ดํ•ด ํ•˜๋ ค๋‹ค

5๏ธโƒฃ ๋ฒˆ ๊ธ€์„ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ตฌ๊ธ€๋ง์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ •๋ง ๋งŽ์€ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋ณด๊ฒŒ ๋˜๋Š”๋ฐ, ํŽธํ•˜๊ฒŒ ์ ์€ ๋“ฏ ํ•˜๋ฉด์„œ๋„ ๋‚ด์šฉ ์ „๋‹ฌ์ด ์ž˜ ๋˜๋Š” ๊ธ€์„ ๋ณด๋ฉด '์ด ๊ธ€์„ ์“ธ ๋•Œ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์˜€์„๊นŒ' ์ƒ๊ฐ์ด ๋“ค์–ด ์ข‹์•„์š”๋ฅผ ๊ผญ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜จ๋‹ค. ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“œ๋Š” ๋งŒํผ ๋‚˜๋Š” ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์“ธ ๋•Œ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”๋ฐ, ๊ทธ๋ž˜๋„ ํ•ญ์ƒ ์•„์‰ฌ์›€์ด ๋‚จ๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ํ•ญ์ƒ '๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•œ๋‹ค' ์— ์ƒ๊ฐํ•˜๋ฉฐ ๊ธ€์„ ๊ณ„์† ์จ ์™”๋Š”๋ฐ ์ง€๊ธˆ๊นŒ์ง€ ๊ธ€์ด ๊ฝค ์Œ“์—ฌ ๋ฟŒ๋“ฏํ•˜๋‹ค! ์งง์€ ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋” ๋ถ€๋‹ด์„ ๋‚ด๋ ค๋†“๊ณ  ๊ธ€์„ ์“ฐ๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ํŽธํ•˜๊ฒŒ ์“ฐ๋ ค๋‹ค ๋ณด๋‹ˆ ๋” ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์•„ ๊ธ€์ด ์ž˜ ์•ˆ ์จ์ง„๋‹ค. ๊ทธ๋Ÿด ์ˆ˜๋ก ๋” ๋ถ€๋‹ด์„ ๋‚ด๋ ค ๋†“๊ณ  ํŽธํ•˜๊ฒŒ ์“ฐ๋ ค ํ•œ๋‹ค. ๐Ÿ” ํ–„๋ฒ„๊ฑฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์ž‘๋…„ ๋ง๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 0 ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ํ’€์–ด๊ฐ€๊ณ  ์žˆ๋Š”๋ฐ ์˜ฌํ•ด ์ดˆ๋ถ€ํ„ฐ 1 ๋ ˆ๋ฒจ์— ..

์งง์€ 2024.03.29 1

[ ์งง์€ ] 4 - '์•ผ๊ธฐ' ๋ฆฌํŒฉํ† ๋ง ์‹œ์ž‘!

4๏ธโƒฃ ๋ฒˆ์งธ [์งง์€] ์„ ์‹œ์ž‘ํ•˜๋ฉฐ ์ฒ˜์Œ [์งง์€] ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋Š” ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ์งง๊ฒŒ๋ผ๋„ ๋‚จ๊ธฐ์ž๋Š” ์ƒ๊ฐ์ด์—ˆ๋Š”๋ฐ, ์ ์  ์นดํ…Œ๊ณ ๋ฆฌ ์ฃผ์ œ๊ฐ€ ๋ฐ”๋€Œ๊ณ  ์žˆ๋‹ค. ์ด๋ž˜๋„ ๋˜๋‚˜ ์‹ถ์ง€๋งŒ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์›๋ž˜์˜ ๋ชฉ์ ์„ ๋ฒ—์–ด๋‚˜์ง„ ์•Š์•˜๋‹ค. [์งง์€]์€ ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์— ๋ถ€๋‹ด์„ ๋Š๋ผ์ง€ ๋ง์ž๋Š” ์ทจ์ง€๋กœ ์‹œ์ž‘ํ–ˆ๋˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ผ, ์–ด๋–ค ๋‚ด์šฉ์ด๋“  ๋งˆ์Œ์ด ๊ฐ€๋Š”๋Œ€๋กœ ๊ธ€์„ ์จ์„œ ์˜ฌ๋ ธ๋‹ค๋ฉด ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ [์งง์€]์˜ ๋ชฉ์ ์„ ์ด๋ฃฌ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์–ด์ฐจํ”ผ ๋‚ด ๋ธ”๋กœ๊ทธ๋‹ˆ๊น๐Ÿ˜— ๐Ÿ’– ๊ฐ„๋‹จ ๊ธ€ ์ž‘์„ฑ ์„œ๋น„์Šค, ์•ผ๊ธฐ :) '์•ผ๊ธฐ'๋Š” ์ •๋ง ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋งŒ๋“  ์•ฑ์ธ๋ฐ, ๋งŒ๋“ ์ง€ 1๋…„ ๊ฐ€๊นŒ์ด ๋˜๋ฉด์„œ iOS ๋ฒ„์ „ ์—…์— ์˜ํ•ด ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•  ๋ถ€๋ถ„๋„ ์ƒ๊ธฐ๊ณ , iOS ๊ณต๋ถ€๋ฅผ ๊พธ์ค€ํžˆ ํ•˜๋ฉด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด ๋งŽ์•˜๋‹ค. ๋ฌผ๋ก  ๊ทธ 1๋…„์ด๋ž€ ๊ธฐ๊ฐ„๋™์•ˆ ๊พธ์ค€ํžˆ ์—…๋ฐ์ดํŠธ๋ฅผ ..

์งง์€ 2024.01.29 1

[ ์งง์€ ] 3 - MVC ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ

3๏ธโƒฃ ์„ธ ๋ฒˆ์งธ '์งง์€'์„ ์‹œ์ž‘ํ•˜๋ฉฐ '์งง์€' ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•œ ์ด์œ ๊ฐ€ ์ƒˆ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ์ด ์žˆ์ง€๋งŒ ์‹œ๊ฐ„ ์ƒ์˜ ์ด์œ ๋กœ ์ •๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ์•„์‰ฌ์›Œ์„œ ์ธ๋ฐ, ๋‘ ๋ฒˆ์งธ ๊ธ€ ์ดํ›„ ๋ฐ”๋น ์„œ ๋˜๋Š” ๋‹ค๋ฅธ ๊ธ€์„ ์“ฐ๋Š๋ผ ๋‘ ๋‹ฌ์ด ์ง€๋‚˜๋„๋ก ์„ธ ๋ฒˆ์งธ ๊ธ€์„ ์“ฐ์ง€ ๋ชปํ–ˆ๋‹ค๐Ÿ˜ฉ ๊ทธ๋ž˜์„œ '์งง์€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์˜์—ญ์„ ํ™•์žฅํ•ด, ์•ž์œผ๋กœ ์ •๋ฆฌํ•  ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ณ„๊ธฐ์™€ ์˜์ง€๋ฅผ ์ ์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค! ๐Ÿ’ญ MVC์™€์˜ ๊ธฐ์–ต ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ์œ ์ง€๋ณด์ˆ˜, ๋ฌธ์ œ ๋ฐœ์ƒ ๋ฐฉ์ง€, ๋†’์€ ์žฌ์‚ฌ์šฉ์„ฑ ๋“ฑ์˜ ์ด์œ ๋กœ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋˜๋ฉฐ, ์œ ๋ช…ํ•œ ํŒจํ„ด์œผ๋กœ๋Š” MVC, MVVM์ด ์žˆ๋‹ค. ์•„ํ‚คํ…์ณ์™€ ๊ด€๋ จํ•ด ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ํ•œ ๋ฒˆ์ฏค ๋“ค์–ด๋ณธ ์–˜๊ธฐ๊ฐ€ ์žˆ๋‹ค. MVC์˜ M์€ 'masive'๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹๊นŒ ํ•˜๋Š” ์ •๋„๋กœ view controller๋งŒ ๋น„๋Œ€ํ•ด์ง€๋ฉฐ ์ด๋Š” ๋น„ํšจ์œจ์ ์ธ ํŒจํ„ด์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜..

์งง์€ 2023.10.11 1
728x90