안녕하세요. 😃
iOS 개발자 비모 🤖 입니다.
오늘은 제가 SwiftUI에 대해 간단하게 설명하는 시간을 가지려고 합니다.
SwiftUI란 무엇인지? 애플에서 왜 SwiftUI를 개발하였는지? 그리고 어떤 장단점이 있는지 알아보고자 합니다!
그럼 시작하겠습니다! 🚀
출처 - WWDC2019 Introducing SwiftUI: Building Your First PPT 중에서..
SwiftUI는 애플이 2019년 WWDC에서 발표한 사용자 인터페이스(UI) 프레임워크입니다. iOS, macOS, watchOS, tvOS 등 애플의 모든 플랫폼에서 앱의 UI를 선언적(declarative) 방식으로 작성할 수 있게 해주는 프레임워크입니다.
• 애플이 SwiftUI를 만든 이유는 최근의 개발 패러다임 변화와 긴밀하게 관련되어 있습니다. 현대 앱 개발 환경에서는 효율적이고 간결한 코드 작성이 점점 더 중요해지고 있습니다.
출처 - https://www.apple.com/kr/newsroom/2024/06/introducing-apple-intelligence-for-iphone-ipad-and-mac/
뿐만 아니라 다양한 플랫폼(iOS, iPadOS, MacOS, WatchOS..)을 지원해야 하는 애플 개발 환경에서는 코드의 재사용성과 일관성이 큰 이슈로 떠올랐습니다.
• SwiftUI는 이러한 요구를 충족시키기 위해 애플이 제시한 선언형(declarative) UI 프레임워크입니다.
그렇다면 SwiftUI의 장점은 무엇일까요?
출처 - https://developer.apple.com/xcode/swiftui/
• SwiftUI는 선언형 프로그래밍 방식을 사용합니다. 이는 개발자가 UI의 상태를 선언적으로 정의하고, 그 상태에 따라 UI가 자동으로 업데이트되도록 합니다.
• 결과적으로, 코드가 간결하고 이해하기 쉬워지며, 유지보수가 용이해집니다.
import SwiftUI
struct ContentView: View {
var body: some View {
#if os(iOS)
NavigationView {
VStack {
Text("iOS에서 실행 중").padding()
}
}
#else
VStack {
Text("macOS에서 실행 중").padding()
}
#endif
}
}
• SwiftUI는 iOS, macOS, watchOS, tvOS 등 애플의 다양한 플랫폼에서 하나의 코드베이스로 UI를 작성할 수 있습니다.
• 이를 통해 여러 플랫폼에 동일한 사용자 경험을 제공하면서, 코드 재사용성을 극대화할 수 있습니다.
출처 - WWDC2020 Structure your app for SwiftUI previews 중에서..
• Xcode에서 제공되는 미리 보기(Preview) 기능을 통해, 코드를 작성하면서 실시간으로 UI 변경 사항을 즉시 확인할 수 있습니다.
• 이 기능은 개발 속도를 크게 향상시키며, 반복적인 빌드-실행 사이클을 줄여줍니다.
뿐만 아니라, 기존에 스토리보드나 AutoLayout을 사용해 UI를 구축하던 개발자들도 Preview 기능을 통해 코드 기반 UI와의 차이를 줄이며 더 빠르고 직관적인 개발을 경험할 수 있습니다. 이로 인해 선언형 UI의 장점인 즉각적인 피드백을 더욱 실감할 수 있습니다.
출처 - WWDC2020 Data Essentials in SwiftUI 중에서..
• SwiftUI는 @State, @Binding, @ObservedObject, @EnvironmentObject 와 같은 속성 래퍼를 사용해 상태를 쉽게 관리할 수 있습니다.
• 상태가 변경되면 UI가 자동으로 다시 렌더링되므로, 별도의 코드 없이도 동기화가 이루어집니다.
struct ContentView: View {
@State private var isAnimating = true
var body: some View {
VStack {
Rectangle()
.foregroundColor(isAnimating ? .yellow : .red)
.frame(width: isAnimating ? 50 : 100, height: isAnimating ? 50 : 100)
.animation(.spring(response: 1,dampingFraction: 0.3 ,blendDuration: 40))
Button("Animate") {
isAnimating.toggle()
}
}
}
}
• SwiftUI는 기본적으로 애니메이션을 쉽게 적용할 수 있는 다양한 API를 제공하여, 몇 줄의 코드로 자연스러운 애니메이션을 구현할 수 있습니다.
• 복잡한 애니메이션도 간단한 코드로 작성할 수 있어, 사용자 경험을 개선할 수 있습니다.
출처 - WWDC2019 SwiftUI Essentials 중에서..
• SwiftUI는 컴포넌트로 UI를 구성하고, 이 컴포넌트를 재사용할 수 있게 합니다.
• 이를 통해 코드 중복을 줄이고, 유연하게 UI를 조합할 수 있습니다.
출처 - WWDC2019 Building Custom Views with SwiftUI 중에서..
SwiftUI 레이아웃 프로세스의 3 단계
- 부모가 자식의 크기를 제안
- 부모의 제안을 받아 자식은 스스로 크기를 선택
- 자식이 선택한 크기를 기반으로 부모는 좌표 공간에 자식을 배치
이제 그외에 SwiftUI의 단점을 한번 알아봅시다!
• SwiftUI는 iOS 13 이상에서만 지원됩니다. 이로 인해, 구형 iOS 버전을 지원해야 하는 앱에서는 SwiftUI만으로 개발하는 것이 어렵습니다.
현실적으로 iOS 13 이상에서 SwiftUI를 사용할 수는 있지만, iOS 15 - 16 이상에서는 더 많은 API들을 지원함으로써, SwiftUI를 보다 원활하게 활용할 수 있습니다.
• SwiftUI는 상대적으로 새로운 프레임워크이기 때문에, UIKit에 비해 기능이 아직 미흡한 부분이 많습니다.
• 복잡한 UI, 고급 애니메이션, 특정 커스텀 컨트롤 구현에서는 SwiftUI만으로는 한계가 있을 수 있습니다. 이때는 여전히 UIKit에 의존해야 합니다.
출처 - https://www.dhiwise.com/post/flutter-vs-swiftui-a-developers-perspective-on-performance
• 처음 SwiftUI로 개발할 때는 각 단계별로 학습이 필요하므로 개발 과정에서 추가 공수가 발생할 수 있습니다.
• Objective-C -> Swift 전환과 마찬가지로 프로젝트 개발 기간이 다소 늘어날 수 있습니다.
그러나 학습 후에는 SwiftUI를 통해 대부분의 작업을 더 빠르게 수행 할 수 있습니다.
• SwiftUI는 여전히 신생 프레임워크이기 때문에, UIKit이나 AppKit과 비교했을 때 외부 라이브러리 지원이 부족합니다.
• SwiftUI는 일반적인 사용 사례에 중점을 둔 컴포넌트를 제공하지만, 모든 개발 요구사항을 충족시키기에는 부족할 수 있습니다.
• 필요에 따라 UIKit이나 AppKit을 래핑해 사용해야 하는 경우가 있으며, 이 과정에서 추가 작업이 발생할 수 있습니다.
• 기존 라이브러리나 컴포넌트가 SwiftUI에서 바로 작동하지 않는 경우, 브리징 작업이 요구될 수 있습니다.
출처 - https://developer.apple.com/documentation/swiftui/view/foregroundcolor(_:)
• SwiftUI는 꾸준히 업데이트되고 있으며, 새로운 기능 추가와 버그 수정이 계속 이루어지고 있습니다.
• 빠른 업데이트는 새 기능을 신속하게 적용할 수 있는 장점이 있지만, 기존 코드와의 호환성 문제를 발생시킬 수 있습니다.
• SwiftUI가 성숙해지면서 더 많은 기능이 추가되겠지만, 이에 따라 개발자는 지속적인 학습과 업데이트에 대응할 필요가 있습니다.
이로써 SwiftUI의 정의 및 장단점에 대해 간단하게 알아보는 시간을 가졌습니다. SwiftUI! 오늘은 간단하게 알아보았으니 다음부턴 조금 더 Deep 하게 알아보는 시간을 가져보고자 합니다.
이만 iOS 개발자 비모 🤖 였습니다.