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

๐Ÿ“ฑ Mobile/iOS

(24)
[iOS - Swift] extension(ํ™•์žฅ) ์— ๋Œ€ํ•ด Swift์—์„œ extension์€ ๊ต‰์žฅํžˆ ๋งŽ์ด ์“ฐ์ธ๋‹ค. ์–ด๋Š ์ˆœ๊ฐ„ ๋‚˜๋„ extension์„ ๊ฝค๋‚˜ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์˜ค๋Š˜์€ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ณ , Swift์—์„œ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ 'ํ™•์žฅ' ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ™•์žฅ extension ์ด๋ž€? ๊ธฐ์กด์˜ ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•, ํ”„๋กœํ† ์ฝœ ๋“ฑ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ํ™•์žฅ์€ ๊ธฐ์กด ํƒ€์ž…์˜ ์ •์˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๊ต‰์žฅํžˆ ํšจ์œจ์ ์ด๋‹ค. extension์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ™•์žฅ extension ์˜ ๊ธฐ๋Šฅ ๋ฉ”์„œ..
iOS - Delegate Pattern (๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด) ๊ฐ„๋‹จํ•œ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ณต๋ถ€๋ฅผ ํ•˜๋˜ ์ค‘์— "๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด"์ด ์ง€์†์ ์œผ๋กœ ์–ธ๊ธ‰๋˜๋ฉฐ ์‚ฌ์šฉํ•˜๊ธธ๋ž˜ ์ž์„ธํžˆ ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์–ด ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค. Delegate Pattern ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์€ iOS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. delegate๋Š” ์‚ฌ์ „์  ์˜๋ฏธ๋กœ '๋Œ€๋ฆฌ์ž', '์œ„์ž„์ž' ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ž์‹ ์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๋„๋ก ์œ„์ž„(delegate)ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, A๊ฐ€ B์—๊ฒŒ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฑ…์ž„์„ B์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. Delegate Pattern ์˜ˆ์‹œ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‹ค์ƒํ™œ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ๋œ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ดํ•™๊ณผ๋Š” MT..
iOS - 2023๋…„ ์ตœ์‹  iOS ๊ฐœ๋ฐœ ๋™ํ–ฅ๊ณผ ์—…๋ฐ์ดํŠธ (feat. WWDC 2023) 2023๋…„ iOS ์•ฑ ๊ฐœ๋ฐœ ๋™ํ–ฅ๊ณผ ์ตœ์‹  ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ง€๋‚œ 6์›”์—๋Š” WWDC 2023์—์„œ Apple์˜ ๋งŽ์€ ๊ธฐ์ˆ ๊ณผ ์—…๋ฐ์ดํŠธ, ๊ทธ๋ฆฌ๊ณ  ์‹ ์ œํ’ˆ๊นŒ์ง€ ๊ณต๊ฐœ๋˜์—ˆ๋‹ค. ์‚ฌ์‹ค ๋‚˜์—๊ฒŒ ์ฒซ WWDC ๊ด€๋žŒ์ด์˜€๋Š”๋ฐ ๋‹ค์‹œ ํ•œ ๋ฒˆ Apple์˜ ๋งค๋ ฅ์— ๋น ์ ธ๋ฒ„๋ ธ๋‹ค. ์•„๋งˆ ์• ํ”Œ ์ƒํƒœ๊ณ„๋ฅผ ์‚ฌ๋ž‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ๊ด€์ „์„ ํ•ด์„œ ๋” ํŠน๋ณ„ํ•˜๊ณ  ๊ฐ•์กฐ๋˜์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ํŠนํžˆ 9๋…„ ๋งŒ์— ๋ฐœํ‘œ๋œ Vision Pro๋Š” ์•„๋งˆ ๋งŽ์€ ๋ถ„๋“ค์ด ์˜ˆ์ธกํ•˜๊ณ  ๊ธฐ๋Œ€ํ–ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. Vision Pro๋Š” 3D ํ™˜๊ฒฝ์—์„œ ๊ฒฝํ—˜์„ ์ž์œ ๋กญ๊ฒŒ ์ƒ์ƒํ•˜๋ฉฐ ๋‘˜๋Ÿฌ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 1. iOS 17 Apple์€ ๋งค๋…„ ์ƒˆ๋กœ์šด iOS๋ฅผ ๋ฐœํ‘œํ•œ๋‹ค. ์˜ฌํ•ด 2023๋…„์—๋Š” iOS 17์ด ์—…๋ฐ์ดํŠธ ๋  ์˜ˆ์ •์ด๋‹ค. WidgetKit์„ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉ ๊ธฐ๋Šฅ ๋ฐ ์• ๋‹ˆ๋ฉ”..
iOS - MVC(Model-View-Controller) ํŒจํ„ด์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? iOS ๊ฐœ๋ฐœ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ตฌ์กฐํ™”ํ•œ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๋ฉฐ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” MVC ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. MVC (Model - View - Controller) MVC๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์•ฑ์˜ ๊ตฌ์„ฑ์„ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•œ๋‹ค. Model : ์•ฑ์˜ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•œ๋‹ค. View : ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. Controller : ๋ชจ๋ธ๊ณผ ๋ทฐ์˜ ์‚ฌ์ด๋ฅผ ์ค‘์žฌํ•ด์ค€๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. Model ์ฃผ๋กœ struct์™€ class๋ฅผ ๋งŒ๋“ ๋‹ค. ์•ฑ์ด ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ด๋‹นํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์ด๋ฉด ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์†Œ์† ๋“ฑ์„ ์ €์žฅํ•˜๊ณ  ์ด๋ฅผ model์—์„œ ..
iOS - UIKit vs SwiftUI ์— ๋Œ€ํ•ด์„œ (2) UIkit์— ๋Œ€ํ•ด์„œ → 2023.07.16 - [iOS] - UIKit vs SwiftUI ์— ๋Œ€ํ•ด์„œ - (1) SwiftUI ๋ž€? ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, iOS, macOS, watchOS, tvOS ์•ฑ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ์ตœ์‹  UI ํˆดํ‚ท์ด๋‹ค. Swift ์–ธ์–ด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ์„ ์–ธ์  ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ UI๋ฅผ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. UIKit์€ ViewController์™€ Storyboard๋ฅผ ์ค‘์‹ฌ์œผ๋กœ UI๋ฅผ ๊ฐœ๋ฐœํ•œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•ด์„œ UI ์š”์†Œ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ์ฝ”๋“œ๋กœ ์ด๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. SwiftUI์˜ ์ฃผ์š” ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ (์˜ˆ์‹œ ์ฝ”๋“œ) ์„ ์–ธ์  ๊ตฌ๋ฌธ SwiftUI๋Š” ์„ ์–ธ์ ์ธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ UI๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. ์ฝ”๋“œ๋กœ UI ์š”์†Œ๋“ค์„ ์„ค๋ช…ํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๋Œ€์‹ , SwiftUI๋Š” ..
iOS - UIKit vs SwiftUI ์— ๋Œ€ํ•ด์„œ (1) SwiftUI์— ๋Œ€ํ•ด์„œ → 2023.07.16 - [iOS] - UIKit vs SwiftUI ์— ๋Œ€ํ•ด์„œ - (1) UIKit ์ด๋ž€? iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. Apple์—์„œ ๊ฐœ๋ฐœํ•œ UIKit์€ iOS ๊ฐœ๋ฐœ์— ํ•ต์‹ฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์•ฑ์˜ ํ™”๋ฉด ๊ตฌ์„ฑ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ, ์• ๋‹ˆ๋ฉ”์ด์…˜, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๋‹ค๋ฃจ๋Š”๋ฐ ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. UIKit์€ ViewController์™€ Storyboard๋ฅผ ์ค‘์‹ฌ์œผ๋กœ UI๋ฅผ ๊ฐœ๋ฐœํ•œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•ด์„œ UI ์š”์†Œ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ์ฝ”๋“œ๋กœ ์ด๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. UIKit์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์„ฑ ์š”์†Œ (์˜ˆ์‹œ ์ฝ”๋“œ) UIView UIKit์˜ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ์ด๋‹ค. ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ชจ๋“  UI ๊ฐ์ฒด๋“ค์˜ ๊ธฐ..

728x90