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

๋ฐ˜์‘ํ˜•

iOS

(26)
SwiftUI) @ViewBuilder์™€ @resultBuilder ๐ŸŒˆ @ViewBuilder ๋ž€ ?: SwiftUI์—์„œ ์—ฌ๋Ÿฌ View๋ฅผ ๊ทธ๋ฃนํ™”ํ•ด์„œ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํŠน๋ณ„ํ•œ ๋นŒ๋” ๋ฌธ๋ฒ•. ๋ณดํ†ต Swift ํ•จ์ˆ˜๋Š” return์— ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ViewBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์ˆ˜์˜ View๋ฅผ ์„ ์–ธ์‹์œผ๋กœ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ. - ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ struct MyView: View { var body: some View { VStack { Text("Hello") Text("World") } }}-> VStack ์˜ trailing closure๋Š” ViewBuilder๋กœ ์ •์˜๋œ ํด๋กœ์ € ์ด๊ธฐ ๋•Œ๋ฌธ์— Text๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋‚˜์—ด ํ•  ์ˆ˜ ์žˆ์Œ โœ… ViewBuilder๊ฐ€ ์—†์œผ๋ฉด?func mak..
@StateObject vs @ObservedObject ์ฐจ์ด SwiftUI์—์„œ @StateObject vs @ObservedObject ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์Ÿˆ. ๋‘˜ ๋‹ค ๋ทฐ๊ฐ€ ViewModel์„ ๊ตฌ๋…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ์ง€๋งŒ, ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ ? โ“ @StateObject- ๋ชฉ์  : ๋ทฐ์—์„œ ViewModel์„ ์ƒ์„ฑํ•˜๊ณ  ์†Œ์œ ํ•  ๋•Œ ์‚ฌ์šฉ.- ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ : View๊ฐ€ ViewModel์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ฑ…์ž„์ง- ์ฃผ ์šฉ๋„ : ์ตœ์ดˆ ์ƒ์„ฑ ๋ทฐ (๋ฃจํŠธ view)- ์ƒ์„ฑ ํƒ€์ด๋ฐ : ๋ทฐ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ViewModel์„ ๊ฐ™์ด ์ƒ์„ฑ struct ContentView: View { @StateObject var viewModel = ToDoViewModel() // ์—ฌ๊ธฐ์„œ ์ƒ์„ฑ! var body: some View { // ... }}..
WWDC24) SwiftUI๋กœ ๋งž์ถคํ˜• ์‹œ๊ฐ ํšจ๊ณผ ์ œ์ž‘ํ•˜๊ธฐ [ ์„ธ์…˜ ์†Œ๊ฐœ ]์ด ์„ธ์…˜์—์„œ๋Š” ๋‹ค์ฑ„๋กญ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ ํšจ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค !์‹œ๊ฐํšจ๊ณผ๋Š” ํŠน์ • ๊ธฐ๋Šฅ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•จ์„ ๋ณด์—ฌ์ฃผ๊ณ , ์•ฑ ํ™”๋ฉด์— ๊ฐœ์„ฑ์„ ๋”ํ•˜๊ณ , ์ง„ํ–‰์ค‘์ธ ์ค‘์š”ํ•œ ์ผ์— ์ฃผ์˜๋ฅผ ์ง‘์ค‘ ์‹œํ‚ค๋Š” ์—ญํ•  !์ƒˆ๋กœ์šด ์‹œ๊ฐํšจ๊ณผ๋ฅผ ๋งŒ๋“ ๋‹ค ? ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—๋Š” ๋ฌด์—‡์ด ์ ํ•ฉํ•œ์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ. ์„ธ์…˜์—์„œ ๋งŒ๋“ค์–ด๋ณผ ์‹œ๊ฐํšจ๊ณผ๋“ค- SwiftUI๋กœ ๋งž์ถคํ˜• ์Šคํฌ๋กค ํšจ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•- ๋ฉ”์‹œ ๊ทธ๋ผ๋””์–ธํŠธ๋กœ ์•ฑ์— ํ’๋ถ€ํ•œ ์ƒ‰์ƒ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•- ๋งž์ถคํ˜• ๋ทฐ ์ „ํ™˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•- ํ…์ŠคํŠธ ๋ Œ๋”๋ง์œผ๋กœ ๊ทผ์‚ฌํ•œ ํ…์ŠคํŠธ ์ „ํ™˜์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•- ๊ธˆ์† ์…ฐ์ด๋”๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ณ ๊ธ‰ ๊ทธ๋ž˜ํ”ฝ ํšจ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• โฌ‡๏ธ Scroll effects - ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์•ฑ ๊ฒฝํ—˜์€ ์Šคํฌ๋กค ํ•˜๋ฉด์„œ ํ™•์ธํ•˜๋Š” ..
WWDC24) SwiftUI ํ•ต์‹ฌ ๊ธฐ๋Šฅ โœ… SwiftUI ๊ธฐ์ดˆ - ํ•ต์‹ฌ ์š”์•ฝSwiftUI๋ž€?Apple์˜ ์„ ์–ธ์  UI ํ”„๋ ˆ์ž„์›Œํฌ.iOS, macOS, watchOS, tvOS ๋“ฑ Apple ์ „ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ๋จ.์ตœ์‹  ์•ฑ๊ณผ ๊ธฐ๋ณธ ์•ฑ์—๋„ ์ ์ง„์ ์œผ๋กœ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ฑ„ํƒ ์ค‘.SwiftUI์˜ ์žฅ์ ์ ์€ ์ฝ”๋“œ๋กœ ๋ณต์žกํ•œ UI์™€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.ํ”Œ๋žซํผ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต.ํ”„๋กœํ† ํƒ€์ž… → ํ”„๋กœ๋•์…˜ ์ „ํ™˜์ด ๋น ๋ฅด๊ณ  ํšจ์œจ์ .์•ฑ์˜ ํ•ต์‹ฌ ๊ฐ€์น˜์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ.์ ์ง„์  ์ฑ„ํƒ ๊ฐ€๋Šฅ์•ฑ ์ „์ฒด๋ฅผ SwiftUI๋กœ ๋งŒ๋“ค ํ•„์š” ์—†์Œ.๊ธฐ์กด UIKit/AppKit๊ณผ๋„ ํ†ตํ•ฉ ๊ฐ€๋Šฅํ•ด ์ ์ง„์ ์œผ๋กœ ๋„์ž… ๊ฐ€๋Šฅ.ํ•™์Šต ์šฉ์ด์„ฑ์œ„ ํŠน์„ฑ๋“ค ๋•๋ถ„์— ์ดˆ๋ณด์ž๋„ SwiftUI๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Œ.๋‚ด์šฉ ๊ตฌ์„ฑ ์˜ˆ๊ณ โ‘  SwiftUI ๋ทฐ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐโ‘ก ๋‚ด์žฅ ๊ธฐ๋Šฅ..
WWDC25) Xcode์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ 2025๋…„๋ถ€ํ„ฐ ์• ํ”Œ์ด ์šด์˜์ฒด์ œ ๋ฒ„์ „ ๋„˜๋ฒ„๋ง ๋ฐฉ์‹์„ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค. !! ๋‘๋‘ฅ๊ทธ๋™์•ˆ์€ ๊ฐ ํ”Œ๋žซํผ๋งˆ๋‹ค ์ œ๊ฐ๊ฐ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์จ์™”์ฃ .iOS๋Š” 18, macOS๋Š” 15, watchOS๋Š” 10, visionOS๋Š” 2์ฒ˜๋Ÿผ์š”.์ˆซ์ž๊ฐ€ ๋‹ค๋ฅด๋‹ค ๋ณด๋‹ˆ ์–ด๋–ค ๊ฒŒ ์ตœ์‹ ์ธ์ง€ ํ—ท๊ฐˆ๋ฆด ๋•Œ๋„ ๋งŽ์•˜๊ณ , ๊ฐœ๋ฐœ์ž๋‚˜ ์‚ฌ์šฉ์ž ๋ชจ๋‘์—๊ฒŒ ๋ถˆํŽธํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์–ด์š”. ๐Ÿ˜‚ ์•ž์œผ๋กœ๋Š” '์—ฐ๋„ ๊ธฐ๋ฐ˜' ๋„˜๋ฒ„๋ง ์ฒด๊ณ„๊ฐ€ ๋„์ž…๋ผ, ๊ฐ™์€ ํ•ด์— ๋‚˜์˜ค๋Š” ๋ชจ๋“  OS๊ฐ€ ํ•˜๋‚˜์˜ ๋ฒˆํ˜ธ๋กœ ํ†ต์ผ๋ฉ๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, 2025๋…„์— ๋ฐœํ‘œ๋˜๋Š” ๋ชจ๋“  ์šด์˜์ฒด์ œ๋Š” '26'์ด๋ผ๋Š” ๋ฒ„์ „์œผ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค.iOS 26, macOS 26, watchOS 26, visionOS 26์ฒ˜๋Ÿผ์š”. โ˜บ๏ธ ์ด ์ˆซ์ž๋Š” ๋‹จ์ˆœํžˆ ๋ฐœํ‘œ ์—ฐ๋„๋ฅผ ๋œปํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ‘2026๋…„๊นŒ์ง€ ์ง€์›๋˜๋Š” ๋ฒ„์ „’์ด๋ผ๋Š” ์˜๋ฏธ๋„ ๋‹ด๊ณ  ์žˆ์–ด์š”.์ด์ œ๋Š” ๋ฒ„์ „..
WWDC24) Swift testing์œผ๋กœ ํ…Œ์ŠคํŠธ ์‹ฌํ™”ํ•˜๊ธฐ ๐Ÿ“˜ Swift testing์œผ๋กœ ํ…Œ์ŠคํŠธ ์‹ฌํ™”ํ•˜๊ธฐ (Xcode 16 ๊ธฐ์ค€) - ํ…Œ์ŠคํŠธ๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”ํ•œ ๋‹จ๊ณ„- ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋›ฐ์–ด๋‚œ ํ’ˆ์งˆ์˜ ์ œํ’ˆ์„ ์ถœ์‹œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ž์‹ ๊ฐ- ๊ณ„์† ๋Š˜์–ด๋‚˜๋Š” ํ…Œ์ŠคํŠธ ๋ชจ์Œ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€ - ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ํ…Œ์ŠคํŠธ๋ฅผ ์ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋งŒ๋“œ๋Š”๊ฒŒ ์ค‘์š”- ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์—์ง€ ์ผ€์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋ ค๋ฉด ๋งŽ์€ ๋…ธ๋ ฅ ํ•„์š”- ๋Œ€๊ทœ๋ชจ ํ…Œ์ŠคํŠธ ์ปฌ๋ ‰์…˜์„ ๊ตฌ์„ฑํ•˜๊ณ  ์—ฐ๊ด€์ง“๋Š” ๊ฒƒ์€ ๋ณต์žกํ•œ ์ผ์ด ๋  ์ˆ˜ ์žˆ์Œ- ํ…Œ์ŠคํŠธ ์‚ฌ์ด์— ์ˆจ๊ฒจ์ง„ ์ข…์†์„ฑ > ํ…Œ์ŠคํŠธ ์ทจ์•ฝ, ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜ 1๏ธโƒฃ Swift Testing ๊ฐœ์š”Swift Testing์€ Xcode 16์— ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ ๊ณต์‹ ์˜คํ”ˆ์†Œ์Šค ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ.๊ธฐ์กด XCTest์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ํ‘œํ˜„๋ ฅ ..
WWDC24) Swift Testing ์†Œ๊ฐœ - ๋›ฐ์–ด๋‚œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋ ค๋ฉด ํ’ˆ์งˆ, ์•ˆ์ •์„ฑ ์ค‘์š”- ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ์„ ๋‹ฌ์„ฑํ•˜๊ณ  ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์ž…์ฆ๋œ ๋ฐฉ๋ฒ• 1๏ธโƒฃ Swift Testing ๊ฐœ์š”Swift Testing์€ Swift ์ „์šฉ์˜ ์ƒˆ๋กœ์šด ์˜คํ”ˆ ์†Œ์Šค ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, Xcode 16์— ๊ธฐ๋ณธ ํฌํ•จ๋จ.๋ชฉํ‘œ: ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํ’ˆ์งˆ๊ณผ ์•ˆ์ •์„ฑ์„ ์žฅ๊ธฐ์ ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›.XCTest์™€๋Š” ๋‹ฌ๋ฆฌ Swift ์–ธ์–ด์˜ ํŠน์„ฑ๊ณผ ๋™์‹œ์„ฑ, ๋งคํฌ๋กœ, ํƒœ๊ทธ ๋“ฑ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ํ™œ์šฉ.Windows, Linux ๋“ฑ ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ง€์›. GitHub ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ ๊ฐœ๋ฐœ ์ค‘. 2๏ธโƒฃ Swift Testing์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ 4๊ฐ€์ง€- ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„ : ํ”„๋กœ์ ํŠธ์— ํ…Œ์ŠคํŠธ ๋ฒˆ๋“ค ๋Œ€์ƒ ์ถ”๊ฐ€ํ•˜๊ธฐ - ์ฒซ ํ…Œ์ŠคํŠธ ์ž‘์„ฑํ•ด๋ณด๊ธฐ โœ… 1..
Objective-C ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ - ํšŒ์‚ฌ ๊ธฐ์กด ์•ฑ์ด Objective-C๋กœ ๋˜์–ด์žˆ๊ณ , ์ด๋ฒˆ์— ์‹ ๊ทœ ๊ฐœ๋ฐœํ•˜๋Š” ์•ฑ์€ ๋น„์Šทํ•œ ๋กœ์ง์„ ๋”ฐ๋ผ Swift ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์—ํ˜„์žฌ ๊ธฐ์กด ์•ฑ์˜ ๋กœ์ง์„ ๊ฐ„๋žตํ•˜๊ฒŒ๋‚˜๋งˆ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด Objective-C์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•จ. Objective-C๋Š” C ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, C ์–ธ์–ด์˜ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ„์„ ์•„๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋จ.๐ŸŽฏ ์ฃผ์š” ํ•™์Šต ํฌ์ธํŠธํด๋ž˜์Šค/๋ฉ”์„œ๋“œ ์„ ์–ธ ๋ฐฉ์‹ (@interface, @implementation)๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฌธ๋ฒ• ([object methodName])ํฌ์ธํ„ฐ ๊ฐœ๋… (NSString *name)ํ”„๋กœํผํ‹ฐ ์„ ์–ธ (@property, @synthesize)์ปฌ๋ ‰์…˜ (NSArray, NSDictionary)@selector, delegate, category, pro..

๋ฐ˜์‘ํ˜•