SwiftUI 핵심 기능 (SwiftUI essential) - WWDC24



다양한 기능이 있으며 Apple 플랫폼에서 자연스럽게 통합되고 더 적은 코드로도 프로덕션을 더 빠르게 만들 수 있음.
또한, 기존 코드 베이스에 한번에 적용하는게 아닌 점진적으로 적용할 수 있도록 호환성도 갖춤.
목차
- Fundamentals of views
- 뷰가 작동하는 방식에 대한 설명
- Built-in capability
- 내장된 기능
- Across all platform
- Apple 플랫폼에서 어떻게 작동하는지 설명
- SDK interoperability
- 다른 프레임워크와 통합되는 SwiftUI

View는 UI의 기본 구성 단위로 화면에 표시되는 모든 픽셀은 어떤 식으로든 뷰에 의해서 정의.
SwiftUI에서 선언형과 명령형은 서로 배타적이지 않으며, SwiftUI는 이 두가지를 모두 수용.
선언적 코드를 사용하는 달성하기 위한 단계 대신 예상되는 결과에 집중할 수 있음.
명령형 코드는 상태를 변경할 때나 기존의 선언적 구성요소가 없을 때 유용.

SwiftUI의 View는 UI의 현재 상태가 어떤지를 기술하는 설명(description)으로 시간이 지남에 따라서 명령형 명령을 받는 오랜 시간 지속되는 객체 인스턴스가 아님.
그래서 SwiftUI에서는 View가 값 타입으로 클래스 대신에 구조체로 정의되어 있음.


또한 SwiftUI에서는 합성을 사용하는데, 이 과정에서는 ViewBuilder라는 클로저를 사용해서 컨테이너의 하위 항목들을 선언.
SwiftUI의 모든 컨테이너 뷰에서 사용되는 패턴

그 다음은 View modifiers를 통해서 뷰를 수정할 수 있으며, View의 컨테이너와 유사한 계층 구조로 동작함
View modifiers의 계층 구조와 순 서는 정확한 순서를 따라서 정의됨.

커스텀 뷰 계층은 View와 View modifilers의 조합으로 캡슐화될 수 있음.
사용자가 선언하는 뷰는 View 프로토콜을 준수하여 자신이 나타내는 뷰를 반환하는 body를 프로퍼티로 가짐.

SwiftUI는 자동으로 boilerplatate를 제거하거 업데이트 버그를 제거하여 UI를 최신 상태로 유지.
SwiftUI는 백그라운드에서 자동으로 UI 표현을 유지함.
데이터가 변경되면, 새로운 뷰 값이 생성되어 SwiftUI에 제공됨.
SwiftUI는 해당 값을 사용하여 출력을 업데이트 하는 방법을 결정.


SwiftUI에서 pet의 hasAward 상태가 변경되면 pet에 의존하는 영역을 재확인하고, 해당 영역에서 body를 재평가하여 새로운 결과를 반환.
> iOS 17 이상부터는 @Observable을 사용해서 객체의 특정 프로퍼티만 뷰를 갱신하는 형태로 동작.
SwiftUI에서는 특정 프로퍼티만 참조하여 종속성을 생성함.

SwiftUI에서는 상태 관리를 위한 여러가지 도구가 있으며, @State와 @Binding이 존재.
뷰의 프로퍼티를 @State로 표시하면 SwiftUI는 저장 공간을 관리하고 뷰가 읽고 쓸 수 있도록 제공.
@Binding은 다른 뷰 상태에 대한 양방향 참조를 생성

SwiftUI에서 뷰가 업데이트되는 흐름
1. 사용자가 Increase 버튼 클릭
2. SwiftUI가 @State로 작성된 값의 변화를 감지하고 RatingView에서 body를 호출하여 새로운 텍스트 값을 반환하여 뷰를 업데이트 함.

SwiftUI의 애니메이션은 지금까지 설명한 내용과 같은 데이터 기반 업데이트의 위에 만들어짐.
withAnimation으로 상태를 래핑하면 결과를 나타내는 텍스트가 기본 애니메이션과 함께 적용됨.
혹은 전환 효과를 커스텀할 수도 있는데, 이 경우에는 Text에 콘텐츠 전환 효과를 사용하면 완벽하게 맞음.

@Binding은 양방향 참조를 제공하여 RatingView를 업데이트할 수 있음.

SwiftUI는 다크모드, 유동적 글자 크기 조절 등 여러 손쉬운 사용 기능, 현재화도 제공함.



SwiftUI는 앱의 진입점에서도 App, Scene을 통해서 신규 구조와 동일하게 사용함.
App은 Scene별로 정의된 선언적 구조이며, macOS와 iOS 등 어떤 플랫폼에서든 사용할 수 있음.
또한 이런 패턴들은 위젯으로도 확장되어 일관된 규칙을 가지고 사용할 수 있음.
즉, SwiftUI는 UI가 모든 플랫폼에 적용되어 손쉽게 개발할 수 있는 휼룡한 시작지점이 됨.

SwiftUI는 이러한 방식으로 코드 공유를 가능하게 하지만, 한 번 작성하면 어디서나 실행되는 것은 아님.
한 번만 익히면 모든 상황에서 또는 모든 Apple 플랫폼에서 사용할 수 있는 도구 모음 정도임.
즉, 각 플랫폼에 특화된 API도 존재

또한, SwiftUI 사용하면 AppKit이나 UIKit모두 Representable 프로토콜을 활용하여 클라이언트에서는 일관되게 지원할 수 있음.
(참고)
https://www.youtube.com/watch?v=HyQgpxX__-A&t=601s