<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>WWDC on Kelly Dev</title><link>https://kelly-chui.github.io/tags/wwdc/</link><description>Recent content in WWDC on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 27 Jul 2026 22:18:58 +0900</lastBuildDate><atom:link href="https://kelly-chui.github.io/tags/wwdc/index.xml" rel="self" type="application/rss+xml"/><item><title>SwiftUI. Essentials - WWDC24</title><link>https://kelly-chui.github.io/posts/wwdc-swiftui-essentials/</link><pubDate>Mon, 27 Jul 2026 22:18:58 +0900</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swiftui-essentials/</guid><description>&lt;p&gt;SwiftUI는 선언형 UI 프레임워크다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rich Feature Set, 다양한 기능과 기기 고유의 이점을 활용할 수 있는 풍부한 기능 집합&lt;/li&gt;
&lt;li&gt;Less Code, 더 적은 코드&lt;/li&gt;
&lt;li&gt;Incremental adoption, 필요한 순간에 적절하게 사용 가능. 전체 앱이 반드시 SwiftUI일 필요는 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="swiftui-essentials"&gt;SwiftUI Essentials&lt;/h3&gt;
&lt;p&gt;SwiftUI는 선언형 UI 프레임워크이기 때문에 UIKit 처럼 &lt;code&gt;UIView&lt;/code&gt; 객체가 계속 메모리에 상주해있고, 그 객체를 직접 변화시키는게 아니라, &lt;code&gt;View&lt;/code&gt;를 보고 SwiftUI가 그리는 방식이다. 즉, &lt;code&gt;View&lt;/code&gt;는 그냥 UI 요소를 정의하는 설계도이다. (Demistify SwiftUI 세션에서도 한 말이다!)&lt;/p&gt;</description></item><item><title>SwiftUI. Discover Observation in SwiftUI - WWDC23</title><link>https://kelly-chui.github.io/posts/wwdc-swiftui-discover-observation-in-swiftui/</link><pubDate>Fri, 24 Jul 2026 17:41:15 +0900</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swiftui-discover-observation-in-swiftui/</guid><description>&lt;p&gt;SwiftUI의 Observation은 모델의 프로퍼티 변화를 추적하고, 그 변화에 맞춰 UI를 업데이트하는 기능이다. &lt;code&gt;@Observable&lt;/code&gt; 매크로를 사용하면 별도의 &lt;code&gt;ObservableObject&lt;/code&gt;, &lt;code&gt;@Published&lt;/code&gt;, &lt;code&gt;@ObservedObject&lt;/code&gt; 없이도 일반 Swift 타입에 가까운 형태로 관찰 가능한 모델을 만들 수 있다.&lt;/p&gt;
&lt;p&gt;핵심은 간단하다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;View가 읽은 프로퍼티가 바뀌면, 그 View가 다시 계산된다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 글에서는 Observation의 동작 방식, &lt;code&gt;@State&lt;/code&gt;, &lt;code&gt;@Environment&lt;/code&gt;, &lt;code&gt;@Bindable&lt;/code&gt;을 언제 써야 하는지, 그리고 기존 &lt;code&gt;ObservableObject&lt;/code&gt; 기반 코드를 &lt;code&gt;@Observable&lt;/code&gt;로 옮기는 방법을 정리한다.&lt;/p&gt;
&lt;h2 id="observation"&gt;Observation&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;@Observable&lt;/code&gt;은 Swift 매크로다. 타입에 이 매크로를 붙이면 컴파일러가 해당 타입을 관찰할 수 있도록 코드를 확장한다.&lt;/p&gt;</description></item><item><title>SwiftUI. The Swiftui Cookbook for Navigation - WWDC22</title><link>https://kelly-chui.github.io/posts/wwdc-swiftui-cookbook-for-navigation/</link><pubDate>Thu, 23 Jul 2026 22:36:54 +0900</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swiftui-cookbook-for-navigation/</guid><description>&lt;h2 id="the-swiftui-cookbook-for-navigation"&gt;The SwiftUI cookbook for navigation&lt;/h2&gt;
&lt;p&gt;SwiftUI의 새로운 내비게이션 API를 발표한 WWDC 세션을 정리했다. 이 내비게이션 API는 각각의 &lt;code&gt;NavigationLink&lt;/code&gt;가 관리하는 대신, 스택 전체의 상태를 데이터로 표현하고 직접 조작할 수 있게 만든다.&lt;/p&gt;
&lt;p&gt;이 구조를 사용하면 버튼을 눌러 이동하는 기본적인 내비게이션뿐만 아니라, 딥 링크나 특정 화면으로 바로 이동하기, 루트 화면으로 돌아가기, 현재 내비게이션 상태 저장까지 같은 모델로 처리할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New naviation API: 새로운 Data-driven 내비게이션 API&lt;/li&gt;
&lt;li&gt;Recipes for navigation: 탐색을 프로그래밍 방식으로 완전히 제어하기&lt;/li&gt;
&lt;li&gt;Persistent state: 새로운 API를 이용하여 앱의 내비게이션 상태를 유지하기&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class="callout" data-callout="note"&gt;
&lt;div class="callout__header"&gt;&lt;span class="callout__icon" aria-hidden="true"&gt;i&lt;/span&gt;&lt;span class="callout__title"&gt;갑자기 프로그래밍 방식?&lt;/span&gt;
&lt;/div&gt;
&lt;div class="callout__body"&gt;&lt;p&gt;SwiftUI는 처음부터 코드로 UI를 작성하는 프레임워크였기 때문에, 기존 &lt;code&gt;NavigationView&lt;/code&gt;도 &lt;code&gt;isActive&lt;/code&gt;나 &lt;code&gt;selection&lt;/code&gt;을 이용해 화면을 프로그래밍 방식으로 전환할 수 있었다.&lt;/p&gt;</description></item><item><title>iOS. Demystify SwiftUI (3) - WWDC21</title><link>https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-3/</link><pubDate>Wed, 22 Jul 2026 23:13:56 +0900</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-3/</guid><description>&lt;h2 id="dependencies-swiftui는-무엇이-바뀌었는지-어떻게-알까"&gt;Dependencies: SwiftUI는 무엇이 바뀌었는지 어떻게 알까?&lt;/h2&gt;
&lt;p&gt;앞선 글에서는 SwiftUI가 View를 구분하는 방식인 Identity와, Identity가 유지되는 기간인 Lifetime을 정리했다. 이번에는 SwiftUI가 View를 업데이트하는 기준인 Dependencies를 살펴본다.&lt;/p&gt;
&lt;p&gt;먼저 결론부터 말하면 SwiftUI의 업데이트 과정은 다음과 같다.&lt;/p&gt;
&lt;div class="code-theme-github"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dependency 변경
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;관련된 View 무효화
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;body 재평가
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;새로운 View Value와 이전 Value 비교
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;실제로 변경된 화면만 업데이트&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Identity는 같은 View인지 판단하고, Lifetime은 상태를 유지하며, Dependency는 어떤 View를 다시 계산해야 하는지 결정한다. 이 세 가지를 함께 이해하면 단순히 API 사용법을 외우는 것보다 SwiftUI의 동작을 더 잘 예측할 수 있다.&lt;/p&gt;</description></item><item><title>SwiftUI. Demystify SwiftUI (2) - WWDC21</title><link>https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-2/</link><pubDate>Tue, 21 Jul 2026 21:42:49 +0900</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-2/</guid><description>&lt;h2 id="lifetime"&gt;Lifetime&lt;/h2&gt;
&lt;p&gt;1편에서는 SwiftUI가 View를 구분하는 방식인 Identity를 정리했다. 이번에는 Identity가 유지되는 시간인 Lifetime과, 그 안에서 &lt;code&gt;State&lt;/code&gt;가 어떻게 보존되는지 살펴본다.&lt;/p&gt;
&lt;p&gt;View Value는 계속 새로 만들어질 수 있지만, Identity가 유지되는 동안에는 같은 View의 Lifetime 안에 있다고 볼 수 있다. 그리고 &lt;code&gt;State&lt;/code&gt;와 &lt;code&gt;StateObject&lt;/code&gt;는 이 Lifetime에 연결되어 있기 때문에 Identity가 바뀌면 함께 교체된다.&lt;/p&gt;
&lt;img loading="lazy" src="https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-2/image-001-optimized-image.webp"&gt;&lt;p&gt;고양이가 하루 동안 이곳저곳 움직이더라도 우리는 계속 같은 고양이라고 생각한다. 이처럼 Identity는 시간에 따라 달라지는 여러 값을 하나의 안정적인 존재로 연결한다. 시간의 흐름 속에서 연속성을 만들어 주는 셈이다.&lt;/p&gt;</description></item><item><title>SwiftUI. Demystify SwiftUI (1) - WWDC21</title><link>https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-1/</link><pubDate>Mon, 20 Jul 2026 21:51:21 +0900</pubDate><guid>https://kelly-chui.github.io/posts/wwdc-swiftui-demystify-swiftui-1/</guid><description>&lt;aside class="callout" data-callout="note"&gt;
&lt;div class="callout__header"&gt;&lt;span class="callout__icon" aria-hidden="true"&gt;i&lt;/span&gt;&lt;span class="callout__title"&gt;시작하기 전에&lt;/span&gt;
&lt;/div&gt;
&lt;div class="callout__body"&gt;&lt;p&gt;Identity는 화면에 띄워지는 UI 요소들이 같은 요소인지, 다른 요소인지 구분하는 방식이다.&lt;/p&gt;
&lt;p&gt;이 WWDC 세션에서 가장 중요한건, View 프로토콜을 채택하여 작성하는 View Structure가 실제 화면에 보이는 요소가 아니라 그냥 그 요소의 설계도일 뿐이라는 것이다. (UIKit과 많이 다르다)&lt;/p&gt;
&lt;p&gt;Swift에서 &amp;lsquo;Value Type은 Immutablity를 가진다.&amp;rsquo; 이라는 말이 가장 크게 체감되는 부분이기도 한데, SwiftUI에서 코드로 작성한 View도 Value Type이고 당연히 Immutable하다. 따라서 한 번 생성된 값은 변하지 않아야 한다. 만약 내부의 값이 변해야 하면 UIKit의 View Controller 처럼 은근슬쩍 내부 프로퍼티만 바꾸지 않고, Value 전체를 새로 만든다.&lt;/p&gt;</description></item></channel></rss>